TCP连接与断开

news/2024/5/17 17:38:56 标签: tcp, 服务器, 通讯, 网络

                                                              

<1>建立连接的过程:
1. 客户端发出段1,SYN位表示连接请求。序号是1000,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次虽然没发数据,但是由于发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。
2. 服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求,同时声明最大尺寸为1024。
3. 客户端发出段3,对服务器的连接请求进行应答,确认序号是8001。

 

在TCP通讯中,如果一方收到另一方发来的段,读出其中的目的端口号,发现本机并没有任何进程使用这个端口,就会应答一个包含RST位的段给另一方。

 

<2>数据传输的过程:
1. 客户端发出段4,包含从序号1001开始的20个字节数据。
2. 服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据,这称为piggyback。
3. 客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据。

 

在数据传输过程中,ACK和确认序号是非常重要的,应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ACK段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区中的数据包重发。
这个例子只描述了最简单的一问一答的情景,实际的TCP数据传输过程可以收发很多数据段,虽然典型的情景是客户端主动请求服务器被动应答,但也不是必须如此,事实上TCP协议为应用层提供了全双工(full-duplex)的服务,双方都可以主动甚至同时给对方发送数据。
如果通讯过程只能采用一问一答的方式,收和发两个方向不能同时传输,在同一时间只允许一个方向的数据传输,则称为'''半双工(half-duplex)''',假设某种面向连接的协议是半双工的,则只需要一套序号就够了,不需要通讯双方各自维护一套序号。

 

<3>关闭连接的过程:
1. 客户端发出段7,FIN位表示关闭连接的请求。
2. 服务器发出段8,应答客户端的关闭连接请求。
3. 服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求。
4. 客户端发出段10,应答服务器的关闭连接请求。
建立连接的过程是三方握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止。


http://www.niftyadmin.cn/n/1615855.html

相关文章

iOS 5的八大缺陷

上周iOS 5发布之后受到获得强烈的反响&#xff0c;然而“金无赤金&#xff0c;人无完人”&#xff0c;iOS 5还是有一些令人不爽的缺陷&#xff0c;虽然不知名&#xff0c;但还是希望苹果能尽快解决。现在就盘点一下它的缺点&#xff0c;看看大家有没有其他的方法解决。 缺陷一 …

流量控制--滑动窗口

问题&#xff1a;如果发送端发送的速度较快&#xff0c;接收端接收到数据后处理的速度较慢&#xff0c;而接收缓冲区的大小是固定的&#xff0c;就会丢失数据, TCP协议通过滑动窗口&#xff08;SlidingWindow&#xff09;机制解决这一问题。 1. 发送端发起连接&#xff0c;声明…

PS命令、procfs

进程的UID和GID 进程的PID 创建进程时系统为每一个进程自动分配一个整数&#xff0c;用于进程身份识别每个进程的PID在内核中是唯一的&#xff0c;不能重复PID资源有限&#xff1a;cat /proc/sys/kernel/pid_maxPPID&#xff1a;该进程父进程的ID号ps -O pid,ppid,tty,cmd //…

乔布斯与Google鲜为人知的故事

据悉&#xff0c;即将上市的《史蒂夫乔布斯传》被提前曝光了部分内容&#xff0c;其中有一段是关于Google的&#xff1a;“如有必要&#xff0c;我会用尽最后一口气&#xff0c;花光苹果400亿美金的积蓄&#xff0c;摧毁Android&#xff0c;因为那是偷来的产品。” 这段话如此地…

进程组与会话

进程组与会话 进程组 什么是进程组? 进程组&#xff1a;一组协同工作或关联进程的集合&#xff0c;每个进程组有ID(PGID)每个进程属于一个进程组&#xff0c;每一个进程组有一个进程组长&#xff0c;该进程组长ID(PID)与进程组ID(PGID)相同一个信号可以发送给进程组的所有进…

平板市场,谁能赶超iPad?

从2001年苹果推出iPod开始&#xff0c;就一直在打造一个全新的产品类别了。直到2010年&#xff0c;iPod依然占据着mp3市场上7成的份额。而在2007年iPhone推出的时候&#xff0c;智能机领域的大佬们纷纷从领先变成了追赶。去年iPad的推出&#xff0c;苹果又成为了行业的领头羊&a…

TCP协议通讯流程

服务器调用socket()、bind()、listen()完成初始化后&#xff0c;调用accept()阻塞等待&#xff0c;处于监听端口的状态&#xff0c;客户端调用socket()初始化后&#xff0c;调用connect()发出SYN段并阻塞等待服务器应答&#xff0c;服务器应答一个SYN-ACK段&#xff0c;客户端收…

前台进程与后台进程

前台进程与后台进程 进程的前后台 前台进程&#xff1a;占有控制终端的进程&#xff0c;其它称为后台进程后台进程&#xff1a; shell中耗时较久的命令可以通过command**&**后台运行好处&#xff1a;下一个命令不必等到上一个进程运行完才能运行一个子进程在创建时若没指…