TCP数据传输

分析TCP的数据传输过程出现的错误就得先知道TCP传输的原理

send ->SOCKET缓冲区->通过OSI顺序进行封包->网卡缓冲器->发送到网络中->网卡接受(目的地非目标主机则扔掉)->OSI解包->SOCKET缓冲区->recv

书上说的TCP是可靠传输,若数据包在上面那个流程丢了,源主机没有在规定的时间收到目的主机的回复,就会按照重传时间进行重传,注意若网络环境不好的话肯定的丢包,你不能指望一个在带宽峰值的下行中能把所有数据都不丢,据楼主了解TCP只会做至多15次重传,若目的主机还没有收到,就不会再进行重传,将缓冲区中的包扔掉,不再进行重传。

 

在SOCKET编程中很多同学不太了解阻塞模式与非阻塞模式,看上面的传输过程,能说是SOCKET阻塞的也就是send-socket缓冲区与socket缓冲区到recv,也就是说当你进行阻塞接受时只有当缓冲区中接收到数据才返回,将数据都放进缓冲区才返回,若是非阻塞则,不管缓冲区是否有数据,recv都返回,根据返回值来确定是否接受到数据,send也是,若没有将数据发送到缓冲区则会返回错误,的自己做处理再次发送数据.

设置套接字非阻塞ioctlsocket(),Linux与win都能用,win套接字还有自己专用的设置异步函数WSAAsyncselect()和WSAEventselect()

 

u_long mode = 0;
ioctlsocket(s,FIONBIO,&mode);
控制为阻塞方式。

u_long mode = 1;
ioctlsocket(s,FIONBIO,&mode);
控制为非阻塞方式。 

 

TCP进行丢包可能是没有发送,发送逻辑出问题了,也可能是真的丢包了,具体问题还得自己细细分析

 

补充一句socket的模式是一个典型的门面模式,各个网络进程通过socket进行数据发送与外界进行联系,各个进程之中没有联系,降低耦合度,门面模式就是为了降低模块之间的耦合度设计的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值