文章目录
传输层协议:TCP协议和UDP协议
- TCP协议:传输控制协议
- UDP协议:用户数据报协议
区别:
-
TCP:面向连接,稳定,慢
-
UDP:无连接,不稳定,快
一、TCP协议介绍(面向连接,稳定,慢)
- TCP是面向连接的、可靠的进程到进程通信的协议(在传输真实数据之前先要进行连接测试(三次握手),如果测试通过才会发送真实数据,否则不会发送真实数据)
- TCP提供全双工服务,即数据可在同一时间双向传输
- TCP报文
①、TCP将若干字节构成一个分组,叫报文段(Segment)
②、TCP报文段封装在IP数据报中
1、TCP特性
1.1 工作在传输层
1.2 面向连接协议
1.3 全双工协议
1.4 半关闭
1.5 错误检查
1.6 将数据打包成段,排序
1.7 确认机制
1.8 数据恢复,重传
1.9 流量控制,滑动窗口
2、TCP报文格式
1.1 端口号:区别应用程序(区别7层协议tcp/80(http)、tcp/443(https)、udp/69(tftp))
端口号范围:0~65535
-
应用层:应用程序
-
传输层:协议/端口号 tcp/80(80端口代表七层协议,http协议),协议要靠程序来实现(端口号不可以重复使用,一个端口号只能被一个程序占用)
1.2 序号:发送端为每个字节编号重组,便于接收端正确重组
1.3 确认号:用于确认发送端的信息(告诉对方我收到了你的消息,确认机制)
1.4 首部长度:IP头部,tcp头部(确定首部数据结构的字节长度)
1.5 控制位:描述了AB两台设备目前处于什么状态
tcp协议先要建立连接
A ---------------》 B
①、没有建立连接
②、已建立连接
③、断开连接
- URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。
- ACK(确认位):表示前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
- PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
- RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接
- SYN(同步位):在建立连接时使用,用来同步序号
- FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕
1.6 滑动窗口(窗口大小):调节每次发送的数据包量
1.7 校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置
3、TCP三次握手
网络环境复杂,为了确保数据能够到达,两次不够,四次多余,三次正好
当pc1想和pc2建立起连接 将连接信息写入报文
第一步 :pc1会发送一个建立连接的请求报文,报文包括:
①、报文的序号(seq=x)
②、同步位(请求建立连接关系: SYN=1 ACK=0 控制位:当前两台设备处于什么状态? 建立连接、处于连接、断开连接 )
第二步:当pc2收到消息以后,要回复一个报文
①、报文的序号(seq=y)
②、ack确认号( 我希望你下一次发送x+1序号的报文给我)
③、控制位SYN=1,ACK=1请求建立连接,pc2同意建立连接
第三步:收到 pc2 同意建立连接的报文后
1.会发送一个x+1报文
2.会告诉对方我希望你下次发送y+1的序号报文给我
3.最后将ACK=1 封装进去,告诉你收到了你的同意请求并且我也统一和你建立连接
4、TCP四次挥手
①、主动关闭方发送FIN:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT_1 状态。
--即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。
②、被动关闭方回复ACK :服务端收到 FIN 之后,会发送 ACK =1报文,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
--即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT_2(终止等待2)状态,等待服务端发出的连接释放报文段。
③、被动关闭方发送FIN :如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
--即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。
④、主动关闭方回复ACK,关闭连接 :客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
--即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
有限状态机:
- closed:断开,没有任何连接状态 (客户端,服务端都有)
- listen:监听状态,等待来自远方TCP端口的连接请求(服务开启http(进程)80端口在帮进程看着有没有人找http)
- syn-sent:发送。在发送连接请求后,等待对方确认(客户端)
- syn-received:在收到和发送一个连接请求后,等待对方确认(服务端)
- established:代表传输连接建立,双方进入数据传送状态(客户端,服务端都有)
- fin-wait-1:主动关闭,主机已发送关闭连接请求,等待对方确认
- fin-wait-2:主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
- time-wait:完成双向传输连接关闭,等待所有分组消失
- close-wait:被动关闭,收到对方发来的关闭连接请求,并已确认
- last-ack:被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
- closing:双方同时尝试关闭传输连接,等待对方确认
客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1状态,这时等待接收服务端报文,该报文会有三种可能:
- 只有服务端的ACK
- 只有服务端的FIN
- 基于服务端的ACK,又有FIN
5、常用的TCP端口号及其功能
端口 | 协议 | 说明 |
---|---|---|
21 | FTP | FTP服务器所开放的控制端口 |
23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
二、UDP协议介绍(无连接,不稳定,快)
1、UDP协议
- 工作在传输层
- 提供不可搞得网络访问
- 无连接
- 有限的错误检查
- 传输性能快
- 无数据恢复特性
telnet协议:明文传输,远程管理协议。探测远端服务器的端口是否打开
命令: telnet IP地址 端口号:服务软件是否正常
2、常用的UDP端口号及其功能
端口 | 协议 | 说明 |
---|---|---|
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |