十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一.基本概念
1.1端口号
端口号(port)标识了一个主机上进行通信的不同的应用程序。
区分两个问题:
1.一个进程可以被多个端口号bind。
2.一个端口号只可以bind一个端口号。
1.2
TCP全称传输控制协议,了解TCP协议首先要了解它的报文组成,
首先在每个协议中都要解决两个问题:
1,如何将报头和有效载荷分离
针对这个问题就要用到tcp报文中的16位目的端口号,通过这个目的端口号将报头和有效载荷分离。
2,如何将自己的有效载荷交付给上层协议
通过读取定长报头和4位头部长度的报头(自描述字段)区分报头和有效载荷。
3为什么TCP中的两种序号:
TCP中的请求既可以是请求也可以是应答,也可能是数据发送,所以我们需要确认序号,来对对方报文的确认,也需要保证我们的报文可以按需到达。
4.报文中的16位窗口大小,用来表示自己的接受缓冲区剩余空间的大小。这里就要提到一个名词流量控制,通过相互通报自己的接受能力给对方,来达到两个方向上的传输速率。
6.六个标志位:
6.1 SYN 标识该报文是一个建立链接的请求的报文
6.2 SYN+ACK 标识允许建立链接请求的报文,ACK标识该报文也有对上一个报文确认的成分
6.3 FIN 断开链接标志位,
6.4 PSH 告知对方尽快将数据交付。
6.5 URG 紧急数据标志位, 通常配合16位紧急指针。
6.6 RST 对方要求重接建立连接,我们把携带RST的报文称为复位报文端。
1.3确认应答机制
TCP中的可靠性依赖一个确认应答机制,确认应答机制保证的是历史数据的可靠性,对最新的数据可靠性不能保证。
二.TCP的过程
2.1三次握手机制,基本过程为,
2.11第一次握手 客户端向服务器发送syn包,并进入同步已发送状态,等待服务器确认,这时YN=1,seq=x。 这个是一个链接建立请求报文。
第二次握手 服务器收到客户端发来的syn包,然后进行确认,同时也发送一个SYN+ACK包给客户端,然后服务器进入同步收到状态这个时候SYN=1,ACK=1,seq=y,ack=x+1。
第三次握手客户端收到服务器发送的SYN+ACK包之后,向服务器发送确认包ACK,这个包发送完毕之后客户端和服务器进入建立链接状态,完成三次握手开始传输数据。
2.12在套接字过程中connect的本质是发起三次握手但是应用层并不关心三次握手,只关心connect 的返回值。
2.13accept的本质一定是握手完成之后,然后返回对应的链接。
2.3为什么是三次握手:
1.三次握手是基数次握手,意味着短暂链接的成本转嫁到客户端
2.可以以最小的成本验证全双工。
2.4四次挥手,
第一次挥手,当数据传输结束后,客户端的应用进程发出连接释放的报文,并停止发送数据,其首部被设置位 FIN=1,seq=1。
第二次挥手 服务器端收到连接释放报文,发出确认报文,其首部ACK=1,seq=v,ACK=U+1,这次的连接处于半关闭状态,客户端不会再向服务器端发送数据,但是服务器仍会向客户端发送。
第三次挥手 服务器没有向客户端发送的数据,其应用进程就会通知服务器释放TCP连接,这个阶段服务器所发出的报文的最后一个连接的报文的首部为FIN=1,ACK=1,seq=w,ack=u+1。
第四次回收 客户端收到连接释放的报文之后,必须发出确认ACK=1,seq=u+1,ack=w=1。再经过2MSL后,本次TCP连接真正结束,通信双方完成告别。
三 .相关问题
3.1在结束连接的过程中为什么为什么在收到服务端的连接释放报文之后客户端还要等待2MSL之后才真正关闭TCP连接呢?
1.需要保证服务端收到客户端的最后一条确认报文。
2.存在一种“已失效的连接请求报文” ,需要避免这种报文出现在本次连接中出现异常。
3.2问什么建立连接时三次握手,而断开连接时四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN 放在一个报文发给客户端。而关闭连接时当收到对方的FIN报文时仅仅表示对方不再发送数据了但还可以接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后再发送FIN报文给对方表示同意现在关闭连接,因此己方的FIN和ACK一般会分开发送。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧