因为UDP和TCP协议是运输层中比较要点的内容,因此这里独自写一篇文章以帮助大家(我自己)更好理解。
UDP协议
UDP仅在IP的数据报服务上添加了两个最基本的服务:复用和分用以及差错检测。
使用UDP的长处:
- UDP无需树立衔接
- 无衔接状况
- 分组首部开支小
- 使用层能更好地操控要发送的数据和发送时刻
- UDP支持1对1、一对多、多对一和多对多的交互通讯。
UDP的首部格式
UDP数据报包含两部分:UDP首部和用户数据。UDP首部有8B,由四个字段张春光,每个字段的长度是2B。它们是:
- 源端口
- 意图端口
- 长度
- 校验和
当传输层从IP层收到UDP数据报事,就根据首部中的意图端口,把UDP数据报通过相应的端口上交给使用进程。假如接收方UDP发现收到的报文中的意图端口号不正确,那么就丢弃该报文,并有ICMP发送“端口不可达”差错报文给发送方。
UDP检验
在核算校验和时,要在UDP数据报之前添加12B的伪首部。伪首部既不向下传送也不向上递交,而只是为了核算校验和。UDO的校验和检查首部和数据部分。
UDP校验和的核算方法:
发送方首先把全0放入校验和字段并添加首部,则要在数据部分结尾填入一个全0字节(但此字节不发送)。然后按照二进制反码核算出这些16为字的和,将此和的二进制反码写入校验和字段并发送。接收方把收到的UDP数据报加上伪首部,将此和的二进制反码写入校验金额字段并发送。接收方把收到的UDP数据报加上伪首部后安二进制反码求这些16位字的和。当无差错时成果应全为1,不然标明有差错,接收方应丢弃这个UDP数据报。
TCP协议
TCP协议是在不牢靠的IP层之上完结的牢靠的数据传输协议,它主要处理传输的牢靠、有序、无丢掉和不重复问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:
- TCP是面向衔接的传输层协议,TCP衔接是一条逻辑衔接。
- 每一条TCP衔接只能有两个端点,每一条TCP衔接只能是点到点的(1对1)
- TCP提供牢靠交付的服务,保证传送的数据无差错、不丢掉、不重复且有序。
- TCP提供全双工通讯,允许通讯双方的使用进程在任何时候都能发送数据,为此TCP衔接的两端都设有发送缓存和承受缓存,用来临时存放双向通讯的数据
- TCP是面向字节省的,尽管使用程序和TCP的交互是一次一个数据块(大小不等),但TCP把使用程序交下来的数据仅视为一连串的无结构的字节省。
TCP和UDP在发送报文时所选用的方法彻底不同。UDP报文的长度由发送使用进程决议,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决议。假如使用程序传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;假如太短,TCP也能够比及堆集足够多的字节后再构成报文段发送出去。
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的整数倍。
TCP衔接办理
TCP衔接的端口为socket,每天TCP衔接唯一地被通讯的两个端点(即两个套接字)承认。
TCP衔接的树立选用客户/服务器模式。主动建议衔接树立的使用进程称为客户,而被动等待衔接树立的使用进程称为服务器。
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洪泛攻击。
(TCP开释在此不再赘述。)
总结:
-
衔接树立
- SYN=1,seq=x
- SYN=1,ACK=1,seq=y,ack=x+1
- ACK=1,seq=x+1,ack=y+1
-
开释衔接
- FIN=1,seq=u
- ACK=1,seq=v,ack=u+1
- FIN=1,ACK=1,seq=w,ack=u+1
- ACK=1,seq=u+1,ack=w+1
因为篇幅原因,暂时先记录到这里~