文章目录
一、网络协议
国际标准化组织(International Standard Organization,ISO)公布了开放系统互连参考模型(OSI/RM)。
OSI/RM是一种分层的体系结构,参考模型共有7层。TCP/IP(Transmission Control Protocol/Internet Protocol)作为Internet的核心协议。它是个协议族,包含多种协议。
分层的基本想法是每一层都在它的下层提供的服务基础上提供更高级的增值服务,而最高层提供能运行分布式应用程序的服务。
发送请求的过程是从最顶层(应用层)出发,每一层负责封装属于自己的信息到请求中,最后将一整个请求发送给对方。
接收请求的过程是从最底层(网络接口层)开始,每一层的协议负责解析属于自己的东西,比如网际层(IP)处理ip信息,传输层(TCP)处理点对点的端口,应用层(HTTP)处理Request
或Response
的Line\Header\Body
。
二、TCP(Transmission Control Protocol,传输控制协议)
TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。
TCP的特点有:
- TCP是面向连接的运输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务
- TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
- 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。
1、TCP头格式
- Source Port(源端口号):数据发起者的端口号,16bit。
- Destination Port(目的端口号):数据接收者的端口号,16bit。
- Sequence Number(顺序号码,Seq):用于在数据通信中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。
- Acknowledgment Number(确认号码,ack):是数据接收方期望收到发送方在下一个报文段的顺序号码(Seq),因此确认号码应当是上次已成功收到顺序号码(Seq)加1,32bit。
- Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(23+22+2^1+1)32bit=60bytes的报文头。最小取值5,532bit=20bytes。
- Reserved(保留):6bit, 均为0
-
- TCP Flags(TCP标志位)每个长度均为1bit
- CWR:压缩,TCP Flags值0x80。
- ECE:拥塞,0x40。
- URG:紧急,0x20。当URG=1时,表示报文段中有紧急数据,应尽快传送。
- ACK:确认,0x10。当ACK = 1时,代表这是一个确认的TCP包,取值0则不是确认包。
- PSH:推送,0x08。当发送端PSH=1时,接收端尽快的交付给应用进程。
- RST:复位,0x04。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
- SYN:同步,0x02。在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
- FIN:终止,0x01。当FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
- 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
- 检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
- 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
- TCP选项:长度可变,最长可达40字节
备注:ISN(Inital Sequence Number):初始化Sequence Number,发生在建立连接时。
2、TCP协议中的三次握手和四次挥手
特别注意
Seq
:是发送方当前报文的顺序号码。
ack
:是发送方期望对方在下次返回报文中给回的Seq。