传输层协议TCP、UDP
一、TCP和UDP协议
-
TCP/IP协议族的传输层协议主要有两个
-
TCP(Transmission Control Protocol )
-
传输控制协议
-
-
UDP(User Datagram Protocol )
-
用户数据报协议
-
-
1.TCP协议
①简介
-
TCP是面向连接的、可靠的进程到进程通信的协议
-
TCP提供全双工服务,即数据可在同一时间双向传输
-
TCP报文段
-
TCP将若干个字节构成一个分组,叫报文段(Segment)
-
TCP报文段封装在IP数据报中
-
②TCP报文段
-
端口:端口是运输层与应用层的服务接口
-
序号:发送端为每个字节进行编号,便于接收端正确重组
-
确认号:用于确认发送端的信息
-
首部长度:确定首部数据结构的字节长度,可以在20-60字节之间
-
保留:目前未被使用,用于今后扩展
-
窗口大小:用来控制本地可接受数据段的数目,此值大小可变化,流量控制机制就是依靠此属性的大小实现的。
-
紧急比特URG---当URG=1时,表明紧急指针字段有效,它告诉系统此报文字段中有紧急数据,应尽快发送
-
确认比特ACK---只有当ACK=1时确认号才有效,当ACK=O确认号则无效,用于确认发送方的数据
-
推送比特PSH---接受TCP收到推送比特置1的报文段,就尽快的交付给接受应用进程,而不是再等到整个缓存填满后再向上交付
-
推送比特PSH---接受TCP收到推送比特置1的报文段,就尽快的交付给接受应用进程,而不是再等到整个缓存填满后再向上交付
-
复位比特RST---当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,再重新建立连接
-
同步比特SYN---同步比特SYN置为1,表示这是一个连接请求或者连接接受报文
-
终止比特FIN---用来释放一个连接,当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放连接
-
校验和:校验和字段检验的范围包括首部和数据。
-
紧急指针:指出在本报文段中的紧急数据的最后一个直接的序号。
-
选项:长度可变,TCP只规定了一种选择,即最大报文段长度
-
接收方希望收到对方下次发送的数据的第一个字节的序号
-
0-1023为公认端口,即固定分配给了一些服务使用
-
1024-49151为注册端口,即灵活使用,用户可随意定义端口与服务
-
③TCP端口号
-
端口号用来区分不同的网络服务
-
每台主机可以拥有多个应用端口,每对端口号、源和目标IP地址的组合唯一地标识了一个会话。端口分为知名端口和动态端口。有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为0-1023。如FTP、HTTP、Telnet、SNMP服务均使用知名端口。动态端口号范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。
-
FTP:21、22
-
HTTP:80
-
SSH:22
-
Telnet:23
-
SMTP:25
-
2.TCP连接
①TCP建立连接的过程称为三次握手
-
第一次握手:主机A将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给主机B,主机A进入SYN_SENT状态,等待主机B确认。
-
第二次握手:主机B收到数据包后由标志位SYN=1知道主机A请求建立连接,主机B将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给主机A以确认连接请求,主机B进入SYN_RCVD状态。
-
第三次握手:主机A收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给主机B,主机B检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,主机A和主机B进入ESTABLISHED状态,完成三次握手,随后主机A与主机B之间可以开始传输数据了。
②TCP传输过程
-
TCP的可靠传输还体现在TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,并且是准确无误的。
-
确认技术的工作原理如下:
-
目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
-
③TCP流量控制
-
<