运输层中的UDP和TCP协议

1、UDP协议
UDP仅在IP的数据报服务上增加了两个最基本的服务:复用和分用以及差错检测。

使用UDP的优点:

UDP无需建立连接

无连接状态

分组首部开销小

应用层能更好地控制要发送的数据和发送时间

UDP支持一对一、一对多、多对一和多对多的交互通信。

1.1 UDP的首部格式

UDP数据报包含两部分:UDP首部和用户数据。UDP首部有8B,由四个字段张春光,每个字段的长度是2B。它们是:

源端口

目的端口

长度

校验和

当传输层从IP层收到UDP数据报事,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程。如果接收方UDP发现收到的报文中的目的端口号不正确,那么就丢弃该报文,并有ICMP发送“端口不可达”差错报文给发送方。

1.2 UDP检验
在计算校验和时,要在UDP数据报之前增加12B的伪首部。伪首部既不向下传送也不向上递交,而只是为了计算校验和。UDO的校验和检查首部和数据部分。

UDP校验和的计算方法:

发送方首先把全0放入校验和字段并添加首部,则要在数据部分末尾填入一个全0字节(但此字节不发送)。然后按照二进制反码计算出这些16为字的和,将此和的二进制反码写入校验和字段并发送。接收方把收到的UDP数据报加上伪首部,将此和的二进制反码写入校验金额字段并发送。接收方把收到的UDP数据报加上伪首部后安二进制反码求这些16位字的和。当无差错时结果应全为1,否则表明有差错,接收方应丢弃这个UDP数据报。

2、TCP协议
TCP协议是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:

TCP是面向连接的传输层协议,TCP连接是一条逻辑连接。

每一条TCP连接只能有两个端点,每一条TCP连接只能是点到点的(一对一)

TCP提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序。

TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据

TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。

TCP和UDP在发送报文时所采用的方式完全不同。UDP报文的长度由发送应用进程决定,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用程序传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;如果太短,TCP也可以等到积累足够多的字节后再构成报文段发送出去。

2.1 TCP报文段
TCP传送的数据单元称为报文段。TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。

一个TCP报文段分为首部和数据两部分。整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。其首部的前20B是固定的。TCP首部最短为20B,后面有4N字节是根据需要而增加的选项。

首部的各字段为:

源端口和目的端口,各占2B。端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现。

序号,占4B。TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

确认号,4B。是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明序号N-1为止的所有数据都已正确收到。

数据偏移(即首部长度),占4位它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位(以4B为计算单位)。由于4位二进制数能表示的最大值为15,因此TCP首部的最大长度为60B。

保留,占6位。

紧急位URG。当URG=1时,表明紧急指针字段有效,表示此报文段中有紧急数据,应尽快传送。

确认位ACK,当ACK=1时,确认号字段有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

推送位PSH(push)。接收方TCP收到PSH=1的报文段,就尽快交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

复位位RST(reset)。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。

同步位SYN。当SYN=1时表示这是一个连接请求或连接接受报文。

终止位FIN(finish)。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

窗口,占2B。表明允许对方发送的数据量。

校验和,占2B。检验的范围包括首部和数据两部分。

紧急指针,占2B。当URG=1才有意义,指出紧急数据共有多少字节。

选项,长度可变。MSS是TCP报文段中的数据字段的最大长度。

填充,为了是整个首部长度是4B的整数倍。

2.2 TCP连接管理
TCP连接的端口为socket,每天TCP连接唯一地被通信的两个端点(即两个套接字)确定。

TCP连接的建立采用客户/服务器模式。主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器。

2.2.1 TCP连接的建立

客户机的TCP首先向服务器发送链接请求报文段。此时首部中的同步位SYN置1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗一个序号。

服务器的TCP收到连接请求报文段后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量。在确认报文段中,把SYN和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。确认报文段也不能携带数据,但要消耗一个序号。

当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK位置1,确认号ack=y+1,序号seq=x+1。该报文段可以携带数据,若不携带数据则不消耗序号。

成功进行以上三步后,就建立了TCP连接。值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击。
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值