美文网首页
iOS TCP 连接原理

iOS TCP 连接原理

作者: zbzbwxe | 来源:发表于2021-03-02 14:07 被阅读0次
    TCP可靠传出的实现:

    1). TCP连接的每一端都必须设有两个窗口(一个窗口发送,一个窗口接收), TCP的可靠传输机制用字节的序号进行控制, TCP所有的确认都是基于序号而不是基于报文段.
    2). 发送过的数据未收到确认之前必须保留,以便超时重传时使用,发送窗口没收到确认不动和收到新的确认后前移.
    3).发送缓存用来暂时存放: 发送应用程序传输给发送方TCP准备发送的数据, TCP已发送出但尚未收到确认的数据.
    4). 接收缓存用来暂时存放: 按序到达的、但尚未被被应用程序接收读取的数据,不按序到达的数据.

    强调三点:
    1. A发送窗口并不总是和B接收窗口一样大.
    2. TCP标准没有规定对不按序到达的数据应如何处理,通常是先临时存放在接收窗口,等到字节流中所缺少的字节收到后,在按序交付上层的应用进程.
    3. TCP要求接收方必须有累积确认的功能,这样可以减小传输的开销.
    TCP 的三次握手
    1. 第一次握手, Client 将标志位SYN = 1(标识要发起一个连接), 随机产生一个值seq = J, 并将该数据包发送给Server, Client端进入SYN_SENT状态等待Server确认.
    2. 第二次握手, Server端收到数据包后, 由标志位SYN = 1知道Client端请求建立连接, Server端将标志位SYN和ACK都设置为1, 随机产生一个seq = K, 并将该数据包发送给Client以确认连接请求, Server进入SYN_RCVD状态.
    3. 第三次握手, Client收到确认后, 检查ack是否为J+1, ACK是否为1, 如果正确将标志位ACK 设置为1, ack = K+ 1, 并将该数据包发送给Server, Server检查ack 是否为K +1,ACK是否为1, 如果正确则连接建立成功, Client和Server端进入established状态,完成三次握手,就可以开始传输数据了.
    TCP 四次挥手

    所谓的四次挥手是终止TCP 连接, 需要客户端和服务端总共发送四个包以确认连接的断开, 在socket编程中由客户端或者服务端任一方执行close来触发.

    1. 第一次挥手, Client 端发送一个FIN, 用来关闭Client到server 的数据传送, client端, 进入 fin_wait_1状态.

    2. 第二次挥手, 服务端收到Fin后, 发送一个ACK 给Client, 确认序号为收到序号+1, server进入close_wait状态.

    3. 第三次挥手, server 发送一个FIN, 用来关闭Server到Client的数据传送, Server进入LAST_WAIT 状态.

    4. 第四次挥手, Client收到FIN后, client 进入time_wait 状态, 发送一个ACK 给server,确认序列号为收到序列号+1, server今入closed 状态,完成四次挥手.

    相关文章

      网友评论

          本文标题:iOS TCP 连接原理

          本文链接:https://www.haomeiwen.com/subject/gkfxrhtx.html