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消息后断开连接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值