三次握手,四次挥手『学习笔记』

来源:互联网 发布:办公软件学习 编辑:程序博客网 时间:2024/06/10 17:07

TCP的三次握手,四次挥手首先在于明确这几个字段的意义:


序号(Sequence Number ):本报文段所发送的数据第一个字节的序号,也叫“报文段序号”。


确认号(Acknowledge Number ):期望收到对方下一个报文段的第一个数据字节的序号。



下面3个是控制位用以说明本报文段的性质。
确认ACK(ACKnowledgement):仅当ACK=1时确认号字段(ack number)才有效。tcp规定,在连接建立后传送的报文段都必须把ACK置1。


同步SYN(SYNchronization):在连接建立时用来同步序号。当SYN=1,ACK=0,表明这是一个连接请求报文段;当SYN=1,ACK=1,表明这是一个连接接受报文段。



终止FIN(FINs):用来释放一个连接。FIN=1,表明此报文段的发送方数据已发送完毕,并要求释放运输连接。



TCP的三次握手:


1.首先A向B发起连接请求报文段,使同步位SYN=1,发送序号seq=x。
2.B同意A的请求,便B向A发起连接接受报文段,故同步位SYN=1,确认位ACK=1。确认号ack=x+1用以表明B服务器已经可以接受到A客户端的报文段。但B服务器不知道A客户端是否可以接受到B给A发送的报文段,所以B也会发一个发送序号seq=y给A。
3.A要向B表明你的报文段我可已收到,此时A向B的连接已经建立,故没有SYN的事了,ACK=1。由于第一个报文段没有携带数据,故自己的序号是seq=x+1,确认号是ack=y+1。

tcp三次握手的关键之处在于理解【网络是双向的】,就好比人与人之间的交流也是双向的,比如李雷和韩梅梅在两座山头唱山歌了,
李雷说:梅梅你能听见我在唱“好汉歌”吗?
韩梅梅说:能啊!那你能听见我在唱“七月份的尾巴”吗?
李雷说:是的,你唱的很好听哦!

TCP的四次挥手:



1.A向B发出连接释放报文段,控制位FIN=1,发送序号seq=u。
A停止向B发送数据。
2. B收到A的连接释放报文段后发出确认,ACK=1,确认号ack=u+1,自己的发送序号是seq=v。此时A到B这个方向的连接已关闭,但注意B到A方向的连接并未关闭。
3.B没有数据继续向A发送,故B向A也发出连接释放报文段。控制位FIN=1,ACK=1;发送序号seq=w,同时必须重复上次发送过的确认号ack=u+1。B停止向A发送数据。
4. A收到B的连接释放报文段后发出确认,ACK=1,自己的发送序号是seq=u+1,确认号ack=u+1。经过2MSL(TIME—WAIT timer 时间等待计时器)后,结束此次的TCP连接。

2MSL的作用:为了保证A发送的最后一个ACK报文段能够到达B。因为不可靠网络有可能出现ACK报文段丢失的情况,所以当B超时重传FIN+ACK报文段时,可以让A重传一次ACK报文段(此时2MSL计时器重新启动)。

tcp的四次断开关键之处在与【tcp连接是全双工的】客户端停止向服务器端传输数据并不意味着服务端也同时停止向客户端传输数据。
韩梅梅说:我累了,我不唱歌了啊!
李雷说:好的,我知道了,但我还想继续唱下去。
(过了一会儿,李雷又唱完了一首“法海你不懂爱”)
李雷说:我也累了,不想唱了。
韩梅梅说:恩咯,我晓得了。

全双工与半双工
全双工指可以同时进行信号的双向双向传输(好比汽车双行道)
半双工指同一时刻只允许信号的单向传输(好比汽车单行道)


书籍:《计算机网络原理第六版》《鸟哥的Linux私饭菜服务器架设篇》

0 0