目录
一.传输层
属于TCP/IP 五层模型的第四层,建立主机端到端连接
1.传输层的主要作用
- 数据分段,数据重组也在传输层
- 连接管理(怎么建立连接和怎么断开连接)
- tcp是端到端通信,端口对端口(tcp当中:包含源端口和目的端口)
- 数据分段和重组
发送方:上层应用程序传输的数据会被进行分段,每个数据段都会有一个序列号,添加一定的控制信息
接送方:在传输层把分段的数据重组,形成完整的数据
连接管理:可以建立,维护以及终止源主机和目的主机之间的连接
可靠性保证:主要针对传输层TCP,数据分段后的有序传递,数据丢失后的检测以及重传
流量控制跟拥塞控制(了解即可)
2.传输层的任务
根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消
传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文
二.TCP和UDP协议
面向连接网络协议:
是指通信双方之间在进行通信之前要先建立连接。比如打电话,双方通话前需要先建立连接
无连接网络协议:
是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包送到网络线路上,由系
统自主选定路线进行传输。比如QQ发送信息
TCP:是面向连接的、可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双
向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据
UDP:是无连接、不保证可靠性的传输层协议。发送端不关心发送的数据是否到达目标主机、数
据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保
障。传输数据速度更快,效率更高
1.TCP协议
TCP(Transmission Control Protocol: 传输控制协议),是计算机网络中非常复杂的一个协议
1.1.TCP协议的功能
-
对应用层报文进行分段和重组
-
面向应用层实现复用与分解
-
实现端到端的流量控制
-
拥塞控制
-
传输层寻址
-
对收到的报文进行差错检测(首部和数据部分都检错)
-
实现进程间的端到端可靠数据传输控制
1.2.TCP协议的特点
-
TCP是面向连接的协议
-
TCP是面向字节流的协议
-
TCP的一个连接有两端,即点对点通信
-
TCP提供可靠的传输服务
-
TCP协议提供全双工通信(每条TCP连接只能一对一)
2.UDP协议
UDP(User Datagram Protocol: 用户数据报协议),是一个非常简单的协议
2.1.UDP协议的特点
-
UDP是无连接协议
-
UDP不能保证可靠的交付数据
-
UDP是面向报文传输的
-
UDP没有拥塞控制
-
UDP首部开销很小
3.TCP报文段
最大报文段长度:报文段中封装的应用层数据的最大长度
3.1.TCP头部组成
*源端口号:发送方进程的端口号
*目的端口号:接收端进程的端口号。接收端收到数据段后,根据这个端口号来确定把数据送给哪个应用程序的进程
序号:发送端为每个字节进行编号,便于接收端正确重组
确认号:对发送端的确认信息。
接收端响应消息时将会用它来告诉发送端这个序号之前的数据段都已经收到,如确认号是X,就是
表示前X-1个数据段都已经收到
头部长度(可根据选项变长,20~60字节):用它可以确定TCP首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节
*控制位(URG ACK PSH RST SYN FIN)
滑动窗口(控制流量大小):说明本地可接收数据段的数目。这个值的大小是可变的,当网络通畅时
接收端响应消息会将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据
的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的。
比如下载速度从一开始的几KB 逐渐提升到几MB 的过程
校验和:用来做差错控制。字段检验的范围包括首部和数据这两部分。数据段在发送时和到达目的
地时会进行校验和计算,若这两次的校验和一致,则说明数据基本是正确的,否则将认为该数据已
被破坏,接收端将丢弃该数据
紧急指针:和 URG配合使用,当 URG=1 时有效
选项:在 TCP首部可以有多达 40 字节的可选信息。例如,最大报文段长度 MSS(Maximum
Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS
个字节。”
TCP标记
4.TCP连接的三次握手(重要)
TCP三次握手使用指令:
建立连接(三次握手):
第一次:客户向服务器发送连接请求段,建立连接请求控制段(SYN=1),表示传输的报文段的
第一个数据字节的序列号是x,此序列号代表整个报文段的序号(seq=x);客户端进入
SYN_SEND (同步发送状态)
第二次:服务器发回确认报文段,同意建立新连接的确认段(SYN=1),确认序号字段有效
(ACK=1),服务器告诉客户端报文段序号是y(seq=y),表示服务器已经收到客户端序号为x的
报文段,准备接受客户端序列号为x+1的报文段(ack_seq=x+1);服务器由LISTEN进入
SYN_RCVD (同步收到状态)
第三次:客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的报文段的序列
号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段(ack_seq=y+1);当客户发送ack时,客户端进入ESTABLISHED 状态;当服务收到客户发送的ack后,也进入ESTABLISHED状态;第三次握手可携带数据
面试小技巧:
-
第一次握手:客户发送请求,此时服务器知道客户能发
-
第二次握手:服务器发送确认,此时客户知道服务器能发能收
-
第三次握手:客户发送确认,此时服务器知道客户能收
5.TCP连接的四次挥手(重要)
释放连接(四次挥手)
第一次:客户向服务器发送释放连接报文段,发送端数据发送完毕,请求释放连接(FIN=1),传
输的第一个数据字节的序号是x(seq=x);客户端状态由ESTABLISHED进入FIN_WAIT_1(终止
等待1状态);
第二次:服务器向客户发送确认段,确认字号段有效(ACK=1),服务器传输的数据序号是y
(seq=y),服务器期望接收客户数据序号为x+1(ack_seq=x+1);服务器状态由ESTABLISHED
进入CLOSE_WAIT(关闭等待);客户端收到ACK段后,由FIN_WAIT_1进入FIN_WAIT_2;
第三次:服务器向客户发送释放连接报文段,请求释放连接(FIN=1),确认字号段有效
(ACK=1),表示服务器期望接收客户数据序号为x+1(ack_seq=x+1);表示自己传输的第一个字
节序号是y+1(seq=y+1);服务器状态由CLOSE_WAIT 进入 LAST_ACK (最后确认状态);
第四次:客户向服务器发送确认段,确认字号段有效(ACK=1),表示客户传输的数据序号是x+1
(seq=x+1),表示客户期望接收服务器数据序号为y+1+1(ack_seq=y+1+1);客户端状态由
FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态;服务器在收到最后一次ACK
后,由LAST_ACK进入CLOSED;
为什么需要等待2MSL
-
最后一个报文没有确认;
-
确保发送方的ACK可以到达接收方;
-
2MSL时间内没有收到,则接收方会重发;
-
确保当前连接的所有报文都已经过期。
三.总结
1.TCP和UDP的区别
-
TCP是面向连接的,UDP是面向无连接的;
-
TCP只能一对一通信,UDP支持一对一,一对多,多对一和多对多交互通信;
-
TCP是面向字节流的,UDP是面向报文的;
-
TCP是可靠传输,使用流量控制和拥塞控制;UDP是不可靠传输
-
TCP首部最小20字节,最大60字节;UDP首部仅8字节。
2.TCP三次握手
客户端 -- SYN=1 --> 服务端
<-- SYN=1,ACK=1 --
-- ACK=1 -->
ESTABLISHED ESTABLISHED
3.TCP四次挥手
客户端 -- FIN=1 --> 服务端
<-- ACK=1 --
<-- FIN=1,ACK=1 --
-- ACK=1 -->
TIME_WAIT CLOSE
2MSL时间后进入CLOSE