(1) TCP层字段
SYN:建立连接,
FIN:关闭连接,
ACK:响应,
PSH:有DATA数据传输,
RST:连接重置。
(2)数据包的关键属性
SYN :标志位,表示请求建立连接
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据
一、三次握手建立过程
- 客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;
- 服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
- 服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯
二、四次挥手
概念:所谓四次挥手就是说关闭TCP连接的过程,当断开一个TCP连接时,需要客户端和服务器共发送四个包确认
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序 号),服务器进入CLOSE_WAIT状态
第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个AKC给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手
深入讨论:
1、为什么连接需要三次,关闭的时候需要四次?
当服务器收到客户端的连接请求后,可以直接发送SYN+ACK报文,其中ACK是确认应答,SYN报文是用来同步的。但 是在关闭连接的时候,当服务器收到FIN的时候,很可能并不会立刻关闭SOCKET,所以只能先回个ACK来应答,只有等服务器把所有报文都发完了才能发送FIN,因此不能一起发送,所有需要四步。
2、为什么断开链接的时候客户端设置的定时器时间等待要2MSL(两个通信报文的最大时间)?
当客户端最终告诉服务器断开确认的时候,他不知道自己的发出的指令是否准确的一次性被服务器接收。
3、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
应用层
任务 :为操作系统或网络应用程序提供访问网络服务的接口 ,通过应用进程间的交互完成特定网络应用。应用层定义的是应用进程间通信和交互的规则
常用协议:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等
HTTP协议(超文本传输协议)
主要特点:
支持客户/服务器模式
简单快速:客户向服务器请求服务时,只需传送请求方法和路径;请求方法常用GET、HEAD、POST等,每种方法规定了客户与服务器联系的不同类型;HTTP协议简单,服务器程序规模小,通信速度较快
灵活:HTTP允许传输任意类型的数据对象;正在传输的数据类型由Content-Type加以标记
无连接:无连接是指每次连接只处理一个请求;服务器处理完客户请求,并收到客户应答后,即断开连接,节省传输时间
无状态:无状态是指协议对于事务处理没有记忆能力;应答较快,但传输数据量较大
HTTP URL:定位网络资源
http://host[:port][abs_path]
HTTP请求
三部分组成:请求行、消息报头、请求正文
格式:Method Request-URI HTTP-Version CRLF
Method:请求方法,GET、POST等
Request-URI:请求的HTTP协议版本
CRLF:回车换行
HTTP响应
由三部分组成:状态行、消息报头、响应正文
状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version:服务器HTTP协议版本
Status-Code:服务器返回的响应状态码
HTTP状态码
由三位数字组成,首数字定义响应类别
1xx:指示信息,表示请求已接收,继续处理;
2xx:成功
3xx:重定向,要完成请求必须进行更进一步的操作;
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务器端错误:服务器未能实现合法的请求
常见状态代码
200:OK,请求成功;
400:Bad Request,请求有语法错误,不能被服务器所理解;
401:Unauthorized,请求未经授权;
403:Forbidden,服务器收到请求,但是拒绝提供服务;
404:Not Found,请求资源不存在;
500:Internet Server Error,服务器发生不可预期的错误;
503:Server Unavailable,服务器不能处理客户请求