TCP/IP协议

TCP/IP协议

IP层解决数据传输过程中的路径选择问题,但是IP本身是面向消息的不可靠的协议。无法解决数据丢失或错误。
TCP层以IP层提供的路径信息为基础完成实际的数据传输,故称为传输层,TCP可以保证可靠的数据传输。

基于TCP的服务器端/客户端函数调用关系

在这里插入图片描述
图4-10的总体流程整理如下:服务器端创建套接字后连续调用bind、listen函数进入等待状态,客户端通过调用connect函数发起连接请求。需要注意的是,客户端只能等到服务器端调用listen函数后才能调connect函数。同时要清楚,客户端调用connect函数前,服务器端有可能率先调用accept函数。当然,此时服务器端在调用accept函数时进入阻塞(blocking)状态,直到客户端调connect函数为止。

客户端调用connect() 之后就可以调用read()write() 向服务器端接收和发送数据。

服务器端调用accept() 后,调用read()write() 接收和发送数据。

close() 函数向对方发送EOF,结束连接。

TCP套接字的I/O缓冲区

TCP套接字的数据收发无边界。服务器端即使调用1次write函数传输40字节的数据,客户端也有可能通过4次read函数调用每次读取10字节。但此处也有一些疑问,服务器端一次性传输了40字节,而客户端居然可以缓慢地分批接收。客户端接收10字节后,剩下的30字节在何处等候呢?是不是像飞机为等待着陆而在空中盘旋一样,剩下30字节也在网络中徘徊并等待接收呢?
实际上,write函数调用后并非立即传输数据,read函数调用后也并非马上接收数据。更准确地说,如图5-2所示, write函数调用瞬间,数据将移至输出缓冲; read函数调用瞬间,从输入缓冲读取数据。
在这里插入图片描述
如图5-2所示,调用write函数时,数据将移到输出缓冲,在适当的时候(不管是分别传送还是一次性传送)传向对方的输入缓冲。这时对方将调用read函数从输入缓冲读取数据。这些1/O缓冲特性可整理如下。
I/O缓冲在每个TCP套接字中单独存在。
I/O缓冲在创建套接字时自动生成。
即使关闭套接字也会继续传递输出缓冲中遗留的数据。
关闭套接字将丢失输入缓冲中的数据。

write() 把数据写入到输出缓冲区后便会返回,而不是等待对方成功接收数据后返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值