因为UDP和TCP协议是运输层中比较要点的内容,因此这里独自写一篇文章以帮助大家(我自己)更好理解。

UDP协议

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

使用UDP的长处:

  1. UDP无需树立衔接
  2. 无衔接状况
  3. 分组首部开支小
  4. 使用层能更好地操控要发送的数据和发送时刻
  5. UDP支持1对1、一对多、多对一和多对多的交互通讯。

UDP的首部格式

计算机网络——运输层中的UDP和TCP协议

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

  1. 源端口
  2. 意图端口
  3. 长度
  4. 校验和

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

UDP检验

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

UDP校验和的核算方法:

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

TCP协议

TCP协议是在不牢靠的IP层之上完结的牢靠的数据传输协议,它主要处理传输的牢靠、有序、无丢掉和不重复问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:

  1. TCP是面向衔接的传输层协议,TCP衔接是一条逻辑衔接。
  2. 每一条TCP衔接只能有两个端点,每一条TCP衔接只能是点到点的(1对1)
  3. TCP提供牢靠交付的服务,保证传送的数据无差错、不丢掉、不重复且有序。
  4. TCP提供全双工通讯,允许通讯双方的使用进程在任何时候都能发送数据,为此TCP衔接的两端都设有发送缓存和承受缓存,用来临时存放双向通讯的数据
  5. TCP是面向字节省的,尽管使用程序和TCP的交互是一次一个数据块(大小不等),但TCP把使用程序交下来的数据仅视为一连串的无结构的字节省。

TCP和UDP在发送报文时所选用的方法彻底不同。UDP报文的长度由发送使用进程决议,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决议。假如使用程序传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;假如太短,TCP也能够比及堆集足够多的字节后再构成报文段发送出去。

TCP报文段

TCP传送的数据单元称为报文段。TCP报文段既能够用来运载数据,又能够用来树立衔接、开释衔接和应答。

计算机网络——运输层中的UDP和TCP协议

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

首部的各字段为:

  1. 源端口和意图端口,各占2B。端口是传输层与使用层的服务接口,传输层的复用和分用功用都要通过端口完结。
  2. 序号,占4B。TCP衔接传送的字节省中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
  3. 承认号,4B。是期望收到对方下一个报文段的第一个数据字节的序号。若承认号为N,则标明序号N-1为止的一切数据都已正确收到。
  4. 数据偏移(即首部长度),占4位它指出TCP报文段的数据开始处距离TCP报文段的开始处有多远。“数据偏移”的单位是32位(以4B为核算单位)。因为4位二进制数能标明的最大值为15,因此TCP首部的最大长度为60B。
  5. 保留,占6位。
  6. 紧迫位URG。当URG=1时,标明紧迫指针字段有用,标明此报文段中有紧迫数据,应赶快传送。
  7. 承认位ACK,当ACK=1时,承认号字段有用。TCP规则,在衔接树立后一切传送的报文段都有必要把ACK置1。
  8. 推送位PSH(push)。接收方TCP收到PSH=1的报文段,就赶快交付给接收使用进程,而不再比及整个缓存都填满了后再向上交付。
  9. 复位位RST(reset)。当RST=1时,标明TCP衔接中呈现严峻差错,有必要开释衔接,然后再从头树立运输衔接。
  10. 同步位SYN。当SYN=1时标明这是一个衔接恳求或衔接承受报文。
  11. 终止位FIN(finish)。当FIN=1时,标明此报文段的发送方的数据已发送结束,并要求开释运输衔接。
  12. 窗口,占2B。标明允许对方发送的数据量。
  13. 校验和,占2B。检验的范围包含首部和数据两部分。
  14. 紧迫指针,占2B。当URG=1才有意义,指出紧迫数据共有多少字节。
  15. 选项,长度可变。MSS是TCP报文段中的数据字段的最大长度。
  16. 填充,为了是整个首部长度是4B的整数倍。

TCP衔接办理

TCP衔接的端口为socket,每天TCP衔接唯一地被通讯的两个端点(即两个套接字)承认。

TCP衔接的树立选用客户/服务器模式。主动建议衔接树立的使用进程称为客户,而被动等待衔接树立的使用进程称为服务器。

TCP衔接的树立

计算机网络——运输层中的UDP和TCP协议

  1. 客户机的TCP首先向服务器发送链接恳求报文段。此时首部中的同步位SYN置1,一起选择一个初始序号seq=x。TCP规则,SYN报文段不能带着数据,但要耗费一个序号。
  2. 服务器的TCP收到衔接恳求报文段后,如赞同树立衔接,则向客户机发回承认,并为该TCP衔接分配缓存和变量。在承认报文段中,把SYN和ACK位都置1,承认号是ack=x+1,一起也为自己选择一个初始序号seq=y。承认报文段也不能带着数据,但要耗费一个序号。
  3. 当客户机收到承认报文段后,还要向服务器给出承认,并为该TCP衔接分配缓存和变量。承认报文段的ACK位置1,承认号ack=y+1,序号seq=x+1。该报文段能够带着数据,若不带着数据则不耗费序号。

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

(TCP开释在此不再赘述。)

总结:

  1. 衔接树立

    • SYN=1,seq=x
    • SYN=1,ACK=1,seq=y,ack=x+1
    • ACK=1,seq=x+1,ack=y+1
  2. 开释衔接

    • 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

因为篇幅原因,暂时先记录到这里~