TCP三次握手
三次握手的实际情况
chai是一位帅气小伙儿,yun是一位文静貌美姑凉。以下是费文字的描述
- chai: 小姐姐,能知道你的芳名吗?
- yun: yun
- yun: 小哥哥,你还没告诉我你的名字呢
- chai: chai
以下省一点
- chai: 小姐姐,能知道你的芳名吗?
- yun: yun,小哥哥,你还没告诉我你的名字呢
- chai: chai
握手流程图
struct tcphdr {
uint16_t source;
uint16_t dest;
uint32_t seq;
uint32_t ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD) // 小端
uint16_t res1:4,
uint16_t doff:4,
uint16_t fin:1,
uint16_t syn:1,
uint16_t rst:1,
uint16_t psh:1,
uint16_t ack:1,
uint16_t urg:1,
uint16_t ece:1,
uint16_t cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD) // 大端
uint16_t doff:4,
uint16_t res1:4,
uint16_t cwr:1,
uint16_t ece:1,
uint16_t urg:1,
uint16_t ack:1,
uint16_t psh:1,
uint16_t rst:1,
uint16_t syn:1,
uint16_t fin:1;
#endif
uint16_t window;
uint16_t check;
uint16_t urg_ptr;
/*The options start here. */
};
第一次syn置为1
第二次syn置为1,ack置为1
第三次ack置为1
TCP四次挥手
四次挥手的实际情况
举例:春节送别。
- 第一次,要走的人说:我要去深圳了
- 第二次,送别的人说:拜拜
- 第三次,送别的人说:我要回家了,对了还有你的东西
- 第四次,要走的人说:拜拜
第一次fin置为1
第二次ack置为1
第三次ack置为1,fin置为1
第四次ack置为1
2MSL
2倍报文生存周期。如果第四次挥手丢失,第三次挥手会在1MSL内重传。
如果我们设置的时间少于 2MSL ,旧的连接刚刚关闭,这个时候有同样的新连接进来了,而之前的连接还有残留报文在网络上,就会干扰新的连接的使用。