Linux网络编程之TCP/IP基础(三)

内容概括:
1.TCP特点
2.TCP报文格式
3.连接建立三次握手
4.连接终止四次握手
5.TCP如何保证可靠性
6.滑动窗口协议
7.UDP特点
8.UDP报文格式

  1. TCP特点
    (1)基于字节流(2)面向连接(3)可靠传输(4)缓冲传输(5)全双工(6)流量控制
  2. TCP报文格式TCP报文的数据格式(1)源端口号与目的端口号:加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。
    (2)序号:序号表示在这个报文段中的第一个数据字节序号。
    (3)确认号:仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。
    (4)头部长度:4位,TCP头部最多60个字节。
    (5)保留位:6位,必须为0。
    (6)6个标志位:URG(紧急指针有效)、ACK(确认序号有效)、PSH(接收方应尽快将这个报文段交给应用层)、RST(连接重置)、SYN(同步序号用来发起一个连接)、FIN(标志将要终止一个连接)。
    (7)窗口大小:通过窗口大小来达到流量控制。
    (8)校验和:对TCP头与数据进行校验。
    (9)紧急指针:是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
    (10)选项与填充(选项为4字节的整数倍,否则用0填充):最常见的可选字段是最长报文大小MSS(Maximum Segment Size),每个连接方通常在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置,默认为536(20+20+536=576字节的IP数据报)。
  3. 连接建立三次握手三次握手三次握手2举个打电话的例子:
    A : 你好我是A,你听得到我在说话吗
    B : 听到了,我是B,你听到我在说话吗
    A : 嗯,听到了
    建立连接,开始聊天!
  4. 连接终止四次握手
    四次握手四次握手22为什么TCP协议终止连接要四次?1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。
    2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。
    3、但这时B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。
    4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。
  5. TCP如何保证可靠性
    (1)应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
    (2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。不过不能及时收到一个确认,将重发这个报文段。
    (3)当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
    (4)TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)。
    (5)TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能失序。TCP将对收到的数据进行重新排序。
    (6)IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
    (7)TCP还能提供流量控制,TCP连接的每一方都有一定大小的缓冲空间。
  6. 滑动窗口协议
    滑动窗口协议用于流量控制,即可用在链路层也可用在传输层。两者不同的在于链路层滑动窗口协议是以为单位进行确认的;而TCP的滑动窗口协议是以字节为单位进行确认的。
  7. UDP特点
    无连接,不可靠, 一般情况下UDP更加高效。
  8. UDP报文格式UDP报文格式

发表评论

电子邮件地址不会被公开。 必填项已用*标注