TCP协议
面向连接、可靠的进程到进程通信的协议,提供全双工服务
TCP报文段首部格式
源端口号和目标端口号:都是进程的端口号
序号:TCP从进程接收数据的字节流时,会储存在发送的缓存中,同时每一个字节进行编号,编号不一定从0开始,首字节的编号是一个随机数(32位无符号),发送和接收这两种方向的编号是互相独立的。当每个字节的编号完成后,TCP会给报文段指定一个“序号”,是报文段首字节的编号,也是唯一标识。当数据传输到目的地后,接收端会按照这个序号把数据重新排序,保证数据的准确性。当一个字节流中有多段时,只有首段的首字节会进行随机编号,之后的段的首字节序号会跟在上一段末字节序号之后。
确认号:对发送端的确认消息,用来告诉发送端这个序号之前的数据段已经被接受完成,如果确认号是X,则说明X-1个数据段已经发送完成
首部长度:确定数据之前的数据所占的总长度,一般长度为一般20字节,根据可选项长度最大可达60字节
保留:目前未被使用,只做未来扩展功能使用
控制位(很重要*):TCP的连接、传输、断开,都受这六个控制位指令的指挥
URG:紧急指针标志位,表面紧急指针是否有效
ACK:确认序号有效位,只有当ACK=1时,确认号才有效,否则无效
PSH:优先级标志位,PSH=1时,要求接收方尽快将数据段送达应用层
PST:重新连接标志位,RST=1时,通知接收方重新建立该TCP连接
SYN:同步序号位,TCP需要建立连接时,SYN=1
FIN:发送端完成任务位,完成任务时TCP连接需要断开,发送端标记FIN=1,接收端就会关闭TCP连接
窗口大小:说明本地可接受数据段的数目,这个值可变,网络通畅时,窗口会变大加快传输效率,网络不稳定时,窗口会减小来保证数据的可靠传输。流量控制机制就是依靠变化窗口来实现
校验和:做差错控制,与IP的校验和不同,TCP的校验和的计算包括TCP首部、数据和其他填充字节。在发送时,发送端计算校验和,接收端也计算校验和比对,若不对应,则接收端丢弃该数据,一般不会要求重传该报文
紧急指针:一般发生的场景:一个数据包因各种原因多次重传,导致后续传输被阻塞或等待,此时发送端会标记URG=1,紧急指针标记了紧急传输的报文的序号
选项:可选设置
TCP连接
IP协议是一个无连接协议,TCP协议是一个面向连接的协议(虚拟连接)
TCP报文段封装成为IP数据包后,可以走不同的路径到达终点(多线程),因此接收到的IP数据包可能不按照顺序到达,甚至损坏或丢失。如果TCP未接受到对应顺序的报文段,则会保留后面的,等待前面的报文段到达,损坏或丢失的会重传,目的是保障TCP报文段是完整的,有序的
三次握手建立连接
1、发送端建立连接:发送SYN报文(序号Seq=x,SYN=1)
2、接收端发送接受反馈:发送SYN+ACK报文(Seq=y,Ack(确认号)=X+1,SYN=1,ACK(确认标志符)=1)
3、发送端继续传后一个,同时附上反馈的反馈:发送ACK报文(Seq=x+1,Ack=y+1,ACK=1)
四次挥手关闭连接
1、发送端请求断开连接:发送FIN+ACK报文(Seq=x,Ack=y+1,FIN=1,ACK=1)
2、接收端发送对发送端请求关闭的应答:发送ACK报文(Seq=y+1,Ack=x+1,ACK=1)
3、接收端请求断开连接:发送FIN+ACK报文(FIN=1,ACK=1)
4、发送端发送对接收端请求关闭的应答:发送ACK报文(ACK=1)
UDP协议
无连接、不可靠的传输协议
花费开销小、传输速度快
UDP报文段首部格式
源端口号+目标端口号+UDP长度+UDP校验和
UDP只关心是否发送,不关心是否送达,UDP长度不是很大,因此报文较小,发送端和接收端的交互很少。速度更快,效率更高。UDP的校验和是UDP提供的唯一的可靠机制。
应用场景:电话、
5732





