TCP协议详解

1.TCP的准备条件

在古代的时候,古人们经常写书信进行交流,写书信的前提是你要知道这份信是要寄给谁

在网络中,我们通过ip+端口号找对目标对象,但是现在网站一般会对ip+端口注册一个域名,所以我们一般就是对域名进行查找,但是虽然我们看到通过域名找到了对应的网站,但是真的是我们看到的那样么?它又是通过什么方法将域名解析成ip+端口呢?

  1. 解析URL

  • 生成发送给web的请求信息

  1. DNS域名解析

DNS:DNS服务器专门保存了Web服务器域名与ip对应关系

TCP协议详解_第1张图片

DNS域名解析过程如图所示,就好比及时一个刚毕业的程序猿,你刚到公司,公司给你了一台全新的电脑,但是你需要首先对电脑进行开机维修,于是你去找了人事部的老张,老赵让你去找维修部,于是你又去找了维修部,但是维修部说,新人的电脑需要去找某部,于是你又去找了某部,最后解决了这个问题

2.TCP协议传输过程

1.请求头的组织结构

TCP协议详解_第2张图片
  1. 源端口和目标端口是为了确定发送对象和接收对象

  1. 序号是为了防止包乱序

  1. 确认号是为了确认接收对象是否接收到了数据

  1. syn-- 发起一个连接 ACK--恢复 RST--重新连接 FIN-- 结束连接 URG--紧急位 PSH--有DATA数据传输

  1. 三次挥手(连接)

  1. 客户端向服务端发送第一次请求,判断服务器是否可正常进行连接

  1. 服务端接收到后,向服务端发送请求,判断服务器是否可以正常发送数据

  1. 客户端接收到信息再次发送请求,表明成功进行连接(双方都有数据传输的能力)

如图所示:

TCP协议详解_第3张图片
  1. 一开始客户端和服务端都是处于CLOSE状态,先是服务器监听到裂开某个接口,随后处于LISTEN状态

  1. 客户端发起连接,发送SYN以及版本seq,随后处于SYS_SENT状态

  1. 服务端接收到连接请求,返回给客户端SYN以及服务端的ACK,随后处于SYN_RCVD状态

  1. 客户端接收到服务端发送的请求,接收到客户端发送的ACK 以及SYN,处于ESTABLISHED状态

  1. 服务端接收到了客户端发送的ACK、SYN,随后也处于ESTABLISHED状态

为什么是3次握手,而不是2次握手或者是4次握手?

  1. 三次握手才可以避免重复历史连接的初始化

  1. 三次就可以同步双方的初始序列号

  1. 可以避免资源的浪费

  1. 怎么避免历史连接?

网络的环境的错综复杂的,往往不是先发先到,而是取决于很多的因素,有可能旧的数据包比新的数据包更早先到主机,三次握手是怎么样进行避免这样的情况出现的呢?

是否还记得我们在上一个图中提起的版本号,它可是这里的主角

TCP协议详解_第4张图片
  1. 假如旧的数据包先比新的数据包到达服务端,服务端将旧的数据包的ACK、SYN发送给客户端

  1. 客户端接收到之后,判断为一个历史连接(序列号过期或者超时),向服务端发送RST请求终止这次连接

  1. 如果是2次连接则不可能避免历史重复连接这种情况的发生

  1. 同步双方初始序列号

序列号的作用

  • 接收方可以取出重复的数据

  • 接收方可以根据序列号进行按序接收

  • 可以对已被接收数据包进行标记

TCP协议详解_第5张图片

4次握手虽然也可以达到同步序列号,但是这种比较浪费资源

  1. 避免浪费资源

如果2次握手,当服务端给客户端发送SYN请求,如果SYN信息被阻塞 ,客户端没有向服务端发送ACK,于是服务端就不确定客户端是否成功接收,所以不断的对客户端发送SYN,SYN堵塞,堆积在一块容易造成资源浪费

TCP协议详解_第6张图片

2次握手解决不了同步序列号以及重复历史连接问题,4次握手对资源是一种浪费

你可能感兴趣的:(tcp/ip,网络,网络协议)