本章结构

TCP协议介绍

TCP报文格式

TCP三次握手

TCP四次挥手

UDP协议介绍

常见协议及其端口


TCP/IP协议族的传输协议

面向连接网络协议, 是指通信双方之间在进行通信之前要先建立连接。比如打电话,双方通话前需要先建立连接。等数据发送结束后,双方再断开连接。

无连接网络协议,是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包送到网络线路上,由系统自主选定路线进行传输。比如OO发送信息。

TCP协议

TCP是面向连接的可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据。

传输层协议介绍_数据

​TCP报文段

​TCP将若干个字节构成一个分组,叫报文段(Segment)

​TCP报文段封装在IP数据报中

传输层协议介绍_首部_02

源端口号:发送方进程的端口号

目标端口号:接收端进程端口号。接收端收到数据后,根据这个端口号来确定把数据送到那个应用程序的进程

序号:发送端为每个字节进行编号,便于接收端正确重组。

确认号

确认号:对发送端的确认信息

首部长度:用它可以确定TCP首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节

控制位:

URG∶紧急位。紧急指针有效位。

ACK∶确认位。只有当ACK=1时,确认序列号字段才有效∶当ACK=0时,确认号字段无效

PSH∶急迫位。标志位为1时,要求接收方尽快将数据段送达应用层。

RST∶重置位。当RST值为1时,通知重新建立TCP连接。

FIN∶断开位。当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1

窗口大小:窗口大小;说明本地可接收数据段的数目。这个值的大小是可变的,当网络通畅时接收端响应消息会将这个窗口值变大以加快传 输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗 口的大小实现的

校验和:, 若​这两次的校验和一致, 则说明数据基本是正确的, 否则将认为该数据已被破坏, 接收端将丢弃该数据紧急指针:和URG配合使用,当URG=1时有效​选项:在TCP首部可以有多达40字节的可选信息。

例如,最大报文段长度MSS (Maximum Segment Size)。MSS告诉对方2

TCP:"我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。"

UDP协议

UDP是一个无连接,不保证可靠性的传输层协议。发送端不关心发送的数据是否到达主机,数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障传输数据速度更快,效率更高。UDP报文的首部格式

传输层协议介绍_首部_03

UDP长度:用来指出UDP的总长度,为首部加上数据

校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制


TCP三次握手

TCP建立连接称为三次握手。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器 确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包 (syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕, 客户端和服务器进入ESTABLISHED(TCP连接成功)。

传输层协议介绍_首部_04

TCP四次挥手

TCP断开连接的四次挥手。

1、客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为 seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT- 1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此 时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务 器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数 据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3、客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器 发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。服务器将最后的数据发送完毕 后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一 些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户 端的确认。

4、客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是 seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须 经过2∗∗MSL(最长报文段寿命)的时间后,才进入CLOSED状态。服务器只要收到了客户端发出的确 认,立即进入CLOSED状态,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户 端早一些。

传输层协议介绍_客户端_05


常见协议及其端口

常用的TCP端口号及其功能


端口:21 协议:FTP 说明:FTP服务器所开放的控制器端口

端口:23 协议:TELNET 说明:用于远程登录,可以远程控制管理目标计算机

端口:25 协议:SMTP 说明:SMTP服务器开放的端口,用于发送邮件

端口:80 协议:HTTP 说明:超文本传输协议

端口:110 协议:POP3 说明:用于邮件的接收


常用的UDB端口号及其功能

端口:69 协议:TFTP 说明:简单文件传输协议

端口:111 协议:RPC 说明:远程过程调用

端口:123 协议:NTP 说明:网络时间协议


总结

TCP是一个可靠的面向连接的协议

TCP建立连接要经历三次握手

TCP断开连接要经历四次挥手

UDP是一个不可靠无连接的协议