TCP/IP(2)

TCP中的TIME_WAIT状态

  • 原因

    1. 主动关闭方需要确认被动关闭方最后是否会重发FIN:因为主动放发送的ACK可能会丢失。
    2. 防止旧的(采用相同插口对)连接的数据干扰新的连接:这点要求其实只要达到MSL即可。
  • 由于TIME_WAIT状态的存在,主动关闭方将不能立即重用处于2MSL期间的端口,被动关闭方没有影响。

    可以使用SO_REUSEADDR选项来强制重用端口,但是这解决不了TCP对处于2MSL等待状态的插口对不能重用的限制。也即即使此时处于2MSL的端口可以被重用,但是不能立即去连接之前的对端插口,连接其它的对端插口是允许的。

TIME_WAIT状态的详解.

协议字段长度

  • MTU最大传输单元: 是链路层承载的数据帧长度的限制,如以太网MTU1500,另外还有一个最小长度46。
    为什么分别有最长、最短:MTU是为了保证数据包的响应速度,因为越长的数据包,传输延时越大;最小长度是在CSMA/CD中出现,是为了能够检测出冲突,结合以太网最长距离和光速来估计的一个发送数据部分的最小值。
    路径MTU,在一条传输路径上,为保证IP不发生分片,最小的MTU值。

  • IP: 基本首部20Byte,UDP首部8Byte,TCP基本首部20Byte,UDP和TCP共同部分,前4Byte都表示16位源端口号:16位目的端口号。
    因此在ICMP差错报文中,为了将差错和特定协议以及用户进程包括进来,返回的报文中至少包含了产生差错的IP首部,以及IP数据部分的前8个字节。
    IP校验和只包括IP首部,采用二进制反码求和。ICMP、UDP、TCP各自包含覆盖各自首部和数据的校验和。

TCP中的连接状态

发现TCP的连接中有许多状态,包括正常的和异常的状态,很容易就让人迷糊了,在这里总结一下。

  • 半连接:书里面较少涉及到的连接状态,在SYN攻击里面有提到,服务器里面处于SYN_RECV状态的连接属于半连接。

  • 半打开:属于异常状态, TCP连接的一方已经关闭,或者异常中止,另一方还不知道这种情况。

  • 半关闭:TCP连接的一方,主动关闭,表明自己没有数据要发送了。但是还可以接收对端发送过来的数据。

  • 同时打开:4个报文段。

  • 同时关闭:4个报文段。

你可能感兴趣的:(tcp)