图解TCP/IP读书笔记(一)

什么是TCP && UDP

  • 这两个是位于传输层的传输协议

TCP协议简单介绍

  • TCP 是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。 TCP 能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外, TCP 还能够有效利用带宽,缓解网络拥堵。

TCP 的特点和目的

  • TCP 通过确认应答、检验、序列号、重发控制、连接管理、窗口管理等机制来实现可靠性传输

UDP协议简单介绍

  • UDP 有别于 TCP ,它是一种面向无连接的传输层协议。 UDP 不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。

TCP和UDP的区别

  • TCP 是面向有链接的传输协议,UDP则不是,UDP只完成传输部分的工作,其余的控制都是由程序来完成
  • TCP 可以进行丢包的情况下控制重发,还可以对顺序乱掉的分包进行控制,在确定通信对端的存在的情况下才会发送数据
  • TCP 的校验和与UDP相似,但是TCP无法关闭

TCP 的机制

为什么TCP 会比较可靠

  • TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管道中的水流。当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。 TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
  • TCP 通过 ACK 来实现传输数据到达端的准确率,通过重复控制来防止对服务器产生过大的压力。这些操作会在 接收端在接收数据 TCP 的首部中的序列号和数据长度体现,并将自己在下一步需要接收数据作为确认应答返送回去。

TCP 可靠性的具体介绍

  • 重发超时确定

  • 它在每次发包都会计算往返时间以及偏差,将这往返时间和偏差相加重发超时的时间,就是比这个总和要稍微大一点的值(初始情况下,一般设置为6秒左右),数据也不会无限制的重发,达到一定次数之后如果还没有应答就会通知应用通信异常强制中止

  • 连接管理

  • 通过TCP 首部用于控制的字段来管理TCP链接,在一次连接的建立与断开的正常过程至少需要来回发送7个包(三次握手四次挥手)

  • TCP 以段为单位发送数据 * 在理想情况下最大消息长度正好是IP中不会被分片处理的最大数据长度 * TCP 在传输数据的时候,是以MSS的大小将数据进行分割发送,重发时也是以 Mss为单位

  • 利用窗口控制来提高速度 * 为了解决包的往返时间越长通信性能也低的 TCP 以一个段为发送单位的缺点 * 通过这个控制,主机将不再发送一个段之后一直等待确认应答,而是继续发送,实现了大量的缓冲区,对多个段同时进行确认应答。缓冲区将会在如期收到应答之后清除并且将窗口滑动到确认应答中的序列号的位置(滑动窗口控制)

  • 窗口控制和重发机制

    • 发送端主机如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称作高速重发控制。
  • 控制流

    • TCP 首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放入这个字段中通知给发送端。接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量(流量控制)。
  • 拥塞控制

    • 由于重复确认导致网络数据吞吐量加大, TCP 会将窗口大小设置满启动阀值+3个数据段

UDP首部格式

  • 源端口号(Source Port) : 字段长16字节。如果没有没有源端口号该字段的值设置为0,这种情况可以用于不需要返回的通信中
  • 接收端端口号 (Destination Port) : 字段长16字节
  • 包长度(Length) : 保存 UDP 首部长度和数据长度之和,字段长8字节
  • 检验和(Checksum) : 为了提供可靠的UDP首部和数据而存在

TCP首部

TCP 拥有和UDP相同的四个首部格式,但增加如下几种,这也是和UDP的区别,并确保TCP传输的可靠性
  • 序列号(Sequence Number) : 字段长32位,指的是发送数据的位置。这个值并不是从0或者1开始而是计算机随机产生的随机值,然后将累计转发值加到初始值上表示初始位置。
  • 确认应答号(Acknowledgement Number) : 字节长度32位。表示已收到的确认应答号减到一为止。
  • 数据偏移(Data Offset) : 字段长度4字节,这个可以简单看作TCP首部的长度。
  • 保留(Reserced) : 长度为4位, 为了以后扩展使用。
  • 控制位(Control Flag) : 字段长为8位,每一位从左至右分别为CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。这些控制标志也叫做控制位。(但是看了博客上显示说只有6位维基百科上显示有9位)(也有可能是我理解偏差,求教)。
  • 窗口大小( Wondow Size) : 该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。TCP不允许发送超过此处所示大小的数据。不过,如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小。但这个数据必须是1个字节。
  • 紧急指针 (Urgent Pointer) : 该字段长为16位。只有在URG控制位为1时有效。指出了紧急数据的末尾在报文段中的位置,也表示数据分流分段的标志。
  • 选项(Options) : 用于提高TCP传输性能,具体可以参考这里

转载于:https://my.oschina.net/zboy/blog/1803197

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值