一,tcp协议
(Transmission Control Protocol)传输控制协议
二,tcp 特性
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查 (校验)
- 将数据打包成段,排序 (给数据排序 看数据来源于哪个主机 区别于ip数据包的标识)
- 确认机制 (对面每发一个包 我会通过报文告诉对面收到了)
- 数据恢复,重传
- 流量控制,滑动窗口
三,tcp报文
(一)端口号
1,端口号范围:
0到65535 前1024是知名端口
2,端口号作用:
区别应用程序(一个端口号只能被一个程序使用) 区别协议(因为协议也是应用程序调用的,端口只能区别应用层协议)
7层协议(应用层协议)对应的程序
ftp 文件传输 vsftpd FileZilla
http 超文本传输 nginx apache lls tomcat
dhcp 自动分配ip dhcp
ssh openssh
安全外壳协议”(Secure Shell),是一种加密的网络传输协议,提供了一个在网络中安全地远程连接到其他计算机和设备的方法
dns 域名解析 bind
比如:http是超文本传输协议,apache/nginx 软件调用http协议
3,客户端端口号服务端端口号
客户端端口号:随机
服务端端口号:一般固定
4,区分应用程序
自己系统通过pid号区分应用程序 (每打开一个应用程序,会随机产生一个pid号 )
两台电脑通过 端口区分应用程序
5,7层协议理解
7层协议就是规定了如何打包数据,然后将打包好的数据传到4层,要通过4层发出去,就像你寄快递,你要先打包,再选一家快递公司,然后按照早就选好的快递公司发出去。
(二)序号
(三)确认号
序号确认号 运作方式:
A向B 发送数据 序号为x B会和A说,希望你下次发数据包的序号是x+1 A下次序号就是x+1
(四)首部长度:
TCP报文段的首部长度
(五)控制位:
描述A,B两个电脑处于什么状态
URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
请求建立连接
FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
(六)窗口大小:
表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
自己话理解:服务端和客户端之间 会根据实际情况后自动调节数据包的大小
比如A给B发序号1 序号2 序号3 B 回确认号3 代表 B 只能处理两条数据 后续A会发序号3,序号4
四,tcp三次握手
(一)三次握手过程
即tcp连接的过程
谁发起请求,谁就是客户端,另一方是服务端
注意:ack是确认号 ACK 是控制号
用自己的话表述三次握手过程:
1,客户端主动发起请求报文,报文序号是随机产生的x 报文中的控制位 SYN=1 表示请求建立连接
2,服务端收到请求建立连接的报文,回复一个报文,该报文也会产生随机得序号y 生成确认号 为客户端请求建立连接的报文序号+1 即x+1 ,控制位SYN=1 ACK=1 表示同意建立连接
3,客户端收到同意建立连接得报文 回复一个确认报文 会按照对方要求生成一个序号为x+1 再生成一个确认号为 对方报文序号+1(即y+1) 最后控制位为ACK=1 表示收到 对方同一连接的请求
(二),三次握手有限状态机
closed 断开连接 客户端 服务端都会存在
listen 监听(理解为随时待命,等待客户端的连接请求) 只有服务端存在
syn-sent 发送 只有客户端存在
syn-rcvd 接收 只有客户端存在
estab 建立连接 客户端 服务端都会存在
(三)为什么要三次握手
网络环境复杂,为了确保数据能够到达,2次不够,4次多余,三次正好
五,四次挥手
(客户端,服务端都可以断开 比如计算就关闭淘宝网页,比如淘宝要维护)
(一)四次挥手过程
有两种情况
1,
此时处于半关闭状态 服务端发送ACK=1 服务端可以向客户端发送数据
2,
FIN=1 ACK=1 直接断 不能发送信息
(二)四次挥手有限状态机
(三)四次挥手注意事项
- CLOSED 没有任何连接状态
- LISTEN 侦听状态,等待来自远方TCP端口的连接请求 (服务开启 http(进程) 80端口在帮进程 看着 有没有人找 http )
- SYN-SENT 在发送连接请求后,等待对方确认
- SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
- ESTABLISHED 代表传输连接建立,双方进入数据传送状态
- FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
- FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
- TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
- CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
- LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
- CLOSING 双方同时尝试关闭传输连接,等待对方确认
(四)为什么要四次挥手
半关闭 怕有数据没有传输完毕
四次挥手 回ACK 是因为数据没有传送完,ACK=1 FIN=1 就是传完了 客户端还有2倍数据发送的等待时间
五,udp协议
(一)udp报文段
(二)udp 特性
1,工作在传输层,
2,提供不可靠的网络访问
3,没有面向连接协议,
4,有限的错误检查
5,传输性能高,6无数据恢复特性
(三)常用udp端口号及其功能
端口 | 协议 | 说明 |
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用,也叫注册中心(用于端口号不固定的服务端) |
123 | NTP | 网络时间协议,也叫时间同步协议(时间不对上不了网) |
六,udp tcp 区别
tcp在传输真实数据前,先要进行连接测试(三次握手)如果测试通过才会发送真实数据,否则不会发送真实数据
udp直接上来就传输数据,不管收只管发
tcp 慢 稳 面相连接
udp 快 不稳 不面相连接