【网络基础】TCP都有三次握手,马云咋就不和我握手呢?

TCP

TCP全名传输控制协议,就理解是个双方通讯必须遵守的规范得了。也是在TCP五层模型中的传输层。

TCP头部报文

讲握手之前先看下头部报文结构:
在这里插入图片描述

图片来源----《小鹿动画学编程》

  • source port:源端口号,指本地端口。例如你电脑上每个程序的端口号。
  • distination port:目的端口号,指远程端口。例如你电脑QQ程序所对应的服务器端口。
  • Sequence Number:序列号。一个数据包在被发送时会分成多个数据段,通过序列号能保证数据段的顺序。
  • Acknowledgment Number:确认序列号,就是每个数据段都有一个序号,该数据段的下个序号就是确认序列号,就是要确认之前的数据段都送达了,记录丢包情况。
  • UAPRSF:统称TCP Flag,用来记录TCP状态,分为URG,ACK,PSH,RST,SYN,FIN。
  • Window size:滑动窗口大小,用来进行流量控制。

ACK

三次握手中的常客,学名应答域有效。我们不整这种高端的,ACK=0表示请求,ACK=1表示收到你呃请求了。比如浏览器发送ACK=0,服务器收到了,响应回一个ACK=1给浏览器表示我收到你的请求了。

SYN

三次握手中的常客,学名同步序列号。不整高端的就表示需要建立TCP连接,放在第一次请求中,一般发送SYN=1来表示。

FIN

用来表明断开连接,没数据发了。

三次握手的过程

  • 第一次握手:浏览器的请求报文中SYN=1,加上自己的初始序号x给服务端,表示需要建立链接;

  • 第二次握手:服务器返回ACK=1,SYN=1,确认序列号为ack=x+1,再加上自己的初始序号y;

  • 第三次握手:客户端接收到后发送ack=y+1,表示已连接;

三次握手的作用

  1. 为了确认双方的接收与发送能力是否正常。
  2. 如果没有三次握手,会出现浏览器发送连接请求,延迟到达服务器后称为一个无效请求(请求太久了浏览器已经在做其他连接操作了),服务器苦苦等待浏览器发数据(等待戈多),造成服务器的资源浪费。
  3. 如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成。

四次挥手的过程

见面最后都有告别的时候,双方通过四次挥手来断开连接。

  • 第一次挥手:浏览器发送请求报文中FIN表明断开连接,加上序列号u(等于前面已经传送过来的数据的最后一个字节的序号加1);

  • 第二次挥手:服务器收到了,返回ACK=1,确认序列号为ack=u+1;

  • 第三次挥手:服务器也含泪发送FIN表明断开连接加上序列号w(由于二次和三次挥手之间可能服务器还有数据传输,所以为了保证顺序在最后个数据的字节序号加1);

  • 第四次挥手:浏览器收到了,返回ACK=1,确认序列号为ack=w+1;

补充

扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口号, 在互联网上 socket 唯一标识每一个应用程序,源端口+源IP+目的端口+目的IP称为”套接字对“,一对套接字就是一个连接,一个客户端与服务器之间的连接。----《小鹿动画学编程》

减少记忆负担

为了减少记忆负担,我就用通俗的话来形象说明三次握手和四次挥手的意思吧,面试这题拿个及格就行。

可以看成是浏览器和服务器的开头对话和结尾。

三次握手
浏览器:在吗?
服务器:在。
浏览器:等下有事找你。

HTTPS过程
浏览器:巴拉巴拉…
服务器:巴拉巴拉…
浏览器:巴拉巴拉…

四次挥手
浏览器:不聊了
服务器:好
服务器:我也没啥和你说的了
浏览器:好

尾巴

这篇文章本意是想写细致一些,但由于我收集的几个文章有出现表述不明确,前后有矛盾的问题,于是我就用简写加不严谨的方式记录了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值