TCP基础(一)

背景

  在工作中接触到通讯这块比较多,有一次服务器出了问题,无法正常提供服务,然后面对一大堆关于tcp的问题,深知自己的不足,所以抽个时间,好好学习一下tcp的基础知识。

一、前言

  TCP是一种面向连接的、可靠的、基于字节流的传输层通讯协议。TCP建立连接三次握手,释放连接四次挥手。

二、TCP建立连接、断开连接流程讲解

image.png

1、TCP建立连接---三次握手

①服务器绑定好端口,开始监听

②客户端连接服务器地址端口,发送SYN包(SYN=1,seq=x),并进入SYN-SEND状态

③服务器接收到客户端的SYN包,发送SYN包,即SYN+ACK包(SYN=1,ACK=1,ack=x+1,seq=y),并进入SYN-RECV状态

④客户端接收到服务器的SYN包,报送ACK包(ACK=1,ack=y+1,seq=x+1),并进入ESTABLISHED(建立连接)状态

⑤服务器接收到客户端的ACK包,最后也进入了ESTABLISHED状态

我用自己的大白话再描述一次

背景
普通飞机RLinux(简称R)、空中加油机CLinux(简称C)
R在执行任务,不能落地,又快没油了,向空中管制部门求救,部门告诉R,C的频道是多少,同时部门让C起飞,并要开启指定广播频道进行监听---①,于是开始了他们的对话。。。

R:(调节频道)你在不在啊,我需要你加点油啊---②
C:我在啊,你把油阀门开一开---③
R:好勒(油阀门开了,建立连接)---④
C:得嘞(加油管伸出去了,建立连接)---⑤

2、TCP断开连接---四次挥手(假设客户端先断)

① 客户端发送FIN包(FIN=1,seq=x),用来关闭客户端到服务器的数据,客户端进入FIN_WAIT1状态

② 服务器接收到FIN,发送ACK包(ACK=1,seq=z,ack=x+1),服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT2状态

③ 服务器发送FIN包(FIN=1,ACK=1,sqe=y,ack=x+1),用来关闭服务器到客户端的数据,服务器进入LAST_ACK状态

④ 客户端回复ACK包(ACK=1,sqe=x+1,ack=y+1),客户端进入TIME_WAIT状态,此时不会里面释放TCP,必须等待计时器设置的时间2MSL(最长报文寿命),客户端才进入CLOSED状态

⑤ 服务器接收到客户端的ACK包后,进入了CLOSED状态

我用自己的大白话再描述一次

背景
两个快递点互相寄快递,一个快递点RLinux(简称R),一个快递点CLinux(简称C),送快递最长时间为2MSL

R:我这个快递点干不下了,准备关门了,没东西寄给你了---①
C:噢噢,我知道了,我这边也收拾收拾,看看有没有你的东西,有就继续给你发,没有的话,我也准备关了---②
 
C继续寄快递到R。。。C不寄了
 
C:不寄给你了,等你收到我这信息,我收拾收拾就关闭了---③
R:收到你消息,你关吧,我等等时间就关了(2MSL)---④
C:好,我关了---⑤

PS: 1、同步到我的CSDN博客:小白求学进阶

2、微信公众号:

参考资料

1、https://www.cnblogs.com/cy568searchx/p/4211124.html 2、https://blog.csdn.net/weixin_41565133/article/details/89737112

# TCP 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×