• TCP与UDP


    TCP与UDP位于网络通信层中的同一层,首先看一下它们在网络通信层中的位置:

                

    TCP与UDP就位于传输层。

    首先介绍一下TCP协议

     三次握手,以访问www.baidu.com为例 

     ① 客户端发送报头  标志位 SYN  ;SYN表示同步的意思 暂时就理解为要求对方返回数据;  sequence number (序列号)为  0(或者为j)

     ② 服务器 收到请求后 回复,报头标志位 SYN  ACK,SYN的意思同上, sequence number (序列号)为  0(或者为n); ACK的意思 是对客户端发送信息的确认 值为 0+1 (或者为 j+1)

     ③ 客户端收到服务器的信息后 回复一个报文,报头标志为ACK 值为1 (或者为n+1)

    这样三次握手完毕;  如果再报文中 没有ACK 标志位,那么 acknowledgment number 也就没有意义。

    OK  看一下报文吧!

    握手协议的目的有两个 :①  确认网络是不是通的         ② 初始化序列号

    下面看一下握手之后  是怎么发送消息的

    以浏览器访问www.sogou.com 为例,看一下他们发送数据的的报文,使用wireshark 工具抓包,查看transmission control protcol层的协议

    浏览器发送的第一条信息

      浏览器发送的第二条信息

      

    下面看一下浏览器的回复

    基本的通信就是这样的:

      1、客户端发送消息(报头 + 包体)

        报头:源端口、地址端口、序列号、报文长度、标志位、windows size value(缓存大小)

        包体:

      2、发送完消息之后,这一条消息会被放在一个重发队列中,如果再一段时间内没有收到对方的回复(对方会收到后会回复的),则重发。如果收到回复,则在重发队列中删除。

      关于TCP的缓存是这样的,假如要发送一段很长的消息,TCP会将这些消息分为几段来发送(截图中的 TCP segment a ressembeled PDU);为什么呢  这是由于TCP缓存决定的,关于TCP的缓存理解的还不是很清楚,这个缓存是在握手协议中就规定好的。主要原因是接收数据的一方,要将接受到的数据放在缓存里,而这个缓存又好像是受链路层的影响,,这就不太懂了,所以 TCP会分片发送。

    四次挥手:

      客户端 发送 FIN标志的报头 报头中带有序列号

      服务端 回一个ACK标志的报头 ACK值为 收到的序列号  +  1   (为了防止 客户端重发 FIN  报文)

      服务端发送一个 FIN标志的报头  报头中有一个序列号

      客户端 回一个ACK标志的报头  ACK的值 为收到的序列号 +1

    下面说一说 UDP吧;UDP也是分为 报头 和  包体的

    UDP的报头

    源端口、目标端口、报文长度、校验值   只有四个字节

    UDP是无连接的,也就是在只管发送数据,至于网络通不通 或者 对方有没有接受到,不管不问。因此可靠性较差;

    但是UDP相对于TCP来说 也是由有点的;

    1、资源与时间消耗少 (报头短   没有握手协议等)

    2、可以抢占网络  在网络不好的情况下,TCP发送速率会动态调节(具体怎么调节的不清楚)  但UDP仍然会向网络层扔大量数据

    比如 QQ,就是使用的UDP协议,不过QQ在应用层 对 传输的可靠性做了处理。

    QQ使用UDP的原因大概如下:资源占用少  时间消耗少  而且当时 没有epoll技术 去实现 多链接中 只有少数活跃这种病发情况的处理,另外 最初 QQ只有一个服务器,所以不能使用太多资源。

    所以 UDP虽然“素质”差点  但如果再上层保证传输的准确性,也是很不错的选择,ping  也是发生的UDP协议。

    问题:TCP中的缓存机制  MSS接受上限  从路由缓存中获得   等知识不了解。

  • 相关阅读:
    [luogu p1996] 约瑟夫问题
    [luogu p1098] 字符串的展开
    [luogu p1035] 级数求和
    [luogu p1004] 方格取数
    [luogu p3383]【模板】线性筛素数
    [luogu p1223] 排队接水
    [luogu p1002] 过河卒
    [luogu p1001] A+B Problem
    Java BIO/NIO(Non-blocking I/O)详解
    Linux页框&伙伴算法以及slab机制
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/4783229.html
Copyright © 2020-2023  润新知