阅读时间:8min 阅读目标:服务器
- 掌握TCP链接过程
- 学会计算seq、ack码
TCP 协议是HTTP协议的重要基础,充分理解TCP协议的链接及端口,有助于咱们深刻理解网络请求和链接。今天就来看图学习TCP请求的链接、数据传输及端口链接。网络
OSI
7层网络模型OSI是
Open System Interconnection
的缩写,国际标准化组织(ISO)制定了OSI模型,该模型定义了不一样计算机互联的标准,是设计和描述计算机网络通讯的基本框架。并发
参考模型(从上至下) | 各层含义 |
---|---|
应用层 | 为应用程序提供服务,如HTTP、FTP、SMTP、POP3等 |
表示层 | 数据格式转换翻译、数据加密解密、压缩解压缩 |
会话层 | 不一样机器之间的用户创建及管理会话 |
传输层 | 创建管理和维护端到端的链接,TCP、UDP |
网络层 | IP地址及路由选择 |
数据链路层 | 物理寻址,将原始比特流转化为逻辑传输线路 |
物理层 | 机械、电子、定时接口通讯信道上上的原始比特流传输 |
接受上一次的数据,将数据进行分割,保证数据准确到达对端。框架
TCP是面向链接的无状态的协议。为了链接的可靠性,每次链接的创建都须要3次握手。学习
3次握手的目的:加密
- 同步链接双方的序列号和确认号;
- 交换TCP窗口大小信息。
客户端(状态) | 创建链接(三次握手) | 服务端(状态) |
---|---|---|
CLOSED |
LISTEN |
|
SYN seq=0 ==》 |
||
SYN_SENT |
||
《== SYN ACK ack=1,seq=0 |
||
SYN_RCVD |
||
ACK ack=1,seq=1 ==》 |
||
ESTABLISHED |
ESTABLISHED |
SYN_SEND
状态,等待服务器的确认。seq+1
或者seq+L
(数据长度L))。同时,本身还要发送SYN请求信息,将seq为0。服务器端将上述全部信息一并发送给客户端,此时服务器进入SYN_RECV
状态。ESTABLISHED
状态,完成TCP三次握手。客户端 | 数据传输 | 服务端 |
---|---|---|
PSH seq=1, ACK ack=1(segmentLen = 99) ==》 |
||
《== PSH seq=1, ACK ack=100 (segmentLen = 119) |
||
ACK ack=120,seq=100 ==》 |
ACK
),而且返回客户端要请求的数据,数据的长度为111,将seq设置为1,ack设置为120(1 + 119)。客户端(状态) | 断开链接 | 服务端(状态) |
---|---|---|
FIN ACK ack=120,seq=100 ==》 |
||
FIN_WAIT_1 |
||
《== ACK ack=101,seq=120 |
||
FIN_WAIT_2 |
CLOSE_WAIT |
|
《== ACK ack=101,seq=120 |
||
LAST_ACK |
||
ACK ack=121,seq=101 ==》 |
||
TIME_WAIT |
CLOSE |
** 计算规则: ** seq 为序列号 ack 为应答码 seq = 对方上次的ack;(首次发送时seq为系统随机生成) ack = 对方的seq+1(无数据传输时) 或者 seq+L(报文数据的长度L)计算机网络