• TCP/IP 网络编程(二):TCP原理


    声明:本系列文章参考书:《TCPIP网络编程 》[韩] 尹圣雨 

    本人仅作笔记使用

    目录

    TCP套接字中的I/O缓冲

    TCP建立连接:三次握手,与对方套接字的连接

    TCP数据交换

    TCP断开连接:四次挥手


    TCP套接字中的I/O缓冲

    之前说到TCP套接字的收发是无边界的,也就是说服务端如果调用1次write 40bytes的数据,客户端也有可能通过4次read来每次读取10字节。

    那么客户端在第一次读取10字节后,剩下的30字节在哪里等候?

    在I/O缓冲中,具体的,输入缓冲中

    write函数后并非立即传输数据;

    read函数调用后也并非立即接收数据。

    更准确的说,write调用瞬间,数据将移动至输出缓冲;read函数调用瞬间,从输入缓冲读取数据。

    总结如下:

    • I/O缓冲在每个TCP套接字中单独存在
    • I/O缓冲在创建套接字是自动生成
    • 即使关闭套接字也会继续传输输出缓冲中遗留的数据
    • 关闭套接字将丢失输入缓冲中的数据

    那如果客户端输入缓冲为50字节,服务端传输了100字节?

    这个问题由TCP中的滑动窗口协议来解决,其大小由接收端来确定

    • 接收端:最多可以向我传输50字节
    • 发送端:OK
    • 接收端:我腾出了20字节空间,最多可以接受70字节
    • 发送端:OK

    TCP建立连接:三次握手,与对方套接字的连接

    分为三步:

    • 与对方套接字建立连接
    • 与对方套接字进行数据交换
    • 断开与对方套接字的连接

    直白理解,引用原文:

    • 【Shake 1】Socket A:你好,B,我要给你传送数据,建立连接吧
    • 【Shake 2】Socket B:好的,我这边已就绪
    • 【Shake 3】Socket A:OK,感谢受理我的请求

    以上为三次握手的对话过程。图如下

    从图中可以获得信息:套接字以全双工方式工作,双向传递数

    TCP数据交换

    TCP断开连接:四次挥手

    直白理解,引用原文:

    • Socket A:你好,B,我要断开连接
    • Socket B:哦,好的,请稍后
    • Socket B:我这边也准备就绪了,可以断开
    • Socket A:OK,谢谢合作。

    双方各发送一次FIN消息后断开连接。

  • 相关阅读:
    Carla安装记录
    基于PHP+MySQL月子中心管理系统的设计与实现
    matlab绘图
    云计算技术大数据概述及其知识点
    k8s获取apiserver token命令
    VINS-Fusion-GNSS松耦合原理
    12.神经网络模型
    Nwafu-OJ-1507 Problem 阶段2考试题目4 手机按键
    如何使用SQL系列 之 如何在SQL中使用WHERE条件语句
    PC_OS IO方式之DMA传输方式
  • 原文地址:https://blog.csdn.net/Jason6620/article/details/127833626