TCP/IP协议一些重要内容

1.TCP相关

        TCP网络故障模式。

          1)永久或临时网络中断

          应用程序和TCP/IP栈不会知道这种情况,发送数据会超时重发。如果路由器返回主机不可达,那么会断开连接,并返回EHOSTUNREACH或ENETUNREACH错误。

          2)对等应用程序奔溃

          果对等的应用程序只是奔溃或终止,那么对等TCP会发送一个FIN

          3)运行对等应用程序主机奔溃 

         保持活跃机制和心跳信号。

         保持信号机制会检测死连接,它会在一段时间后发送一个特殊的段,以判断连接的状态。

1)在这个过程中,如果对等主机可达,但应用程序没有运行,那么会发送一个RST响应,并断开连接,然后向应用程序返回一个ECONNRESET错误,这种原因通常为主机崩溃重启。

2)如果对等的应用程序只是奔溃或终止,那么对等TCP会发送一个FIN。

3)如果对等主机没有返回RST响应或ACK响应,那么保持信号机制会一直发送,知道认为可以停止为止。这时,会丢弃连接,并返回ETIMEOUT错误,如果路由器返回一个ICMP主机或网络不可达时,会向应用程序返回EHOSTUNREACH或ENETUNREACH错误。

这个保持信号机制一般会在2小时后发送,一般会75秒后发送一次,这种间隔根据不同系统可以修改和不同。

        心跳信号的两种方式:1)如果有固定报文类型的报文头,那么可以增加一个心跳报文类型。2)如果没有固定报文类型的报文头,那么可以建立一个单独连接专门来发送心跳信号。

TCP立即发送数据的情况:
1)缓冲区的数据可以构成一个MSS尺寸的段、
2)连接空闲,并且可以清空发送缓冲区。
3)禁用nagle算法,并且可以清空发送缓冲区
4)有紧急数据需要发送
5)有一小段“占时”无法发送的数据
6)对等实体接受窗口至少是半开着的
7)需要重传一个段
8)需要为对等实体返回一个ACK
9)需要发布一个窗口更新

等待时间TIME_WAIT为2MSL.
RST可能会打断TIME_WAIT。(两个情况可能发送RST,一些自然情况,或者设置SO_LINGER选项的l_linger为0)
可以使用SO_REUSEADDR将TCP绑定到已经使用的端口上,这可以解决TIME_WAIT等待问题。
可以使用套接字选项TCP_NODEALY来禁用Nagle算法。、
将sockaddr_in清零
不要忘记网络序列
不要讲IP地址和端口号直接放入程序。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值