TCP:传输控制协议,可靠的进程到进程通信的协议
UDP:用户数据报协议
TCP/IP分层:定义了四层,和 OSI参考模型的分层有对应关系
相同点:
两者都是以协议栈的概念为基础 协议栈中的协议彼此相互独立 下层对上层提供服务
不同点:
OSI是先有模型;TCP/IP是先有协议,后有模型 OSI是国际标准,适用于各种协议栈;
TCP/IP实际标准, 只适用于TCP/IP网络 层次数量不同
是指通信双方之间在进行通信之前 要先建立连接。比如打电话,双方通话前需要先建立连 接。等数据发送结束后,双方再断开连接。
是指通信双方不需要事先建立一条通 信线路,而是把每个带有目的地址的包送到网络线路 上,由系统自主选定路线进行传输。比如QQ发送信息。
1.工作在传输层
2.提供不可靠的网络访问
3.非面向连接协议
4.有限的错误检查
5.传输性能高
6.无数据恢复特性
1.工作在传输层
2.面向连接协议
3.全双工协议
4.半关闭
5.错误检查
6.将数据打包成段,排序
7.确认机制
8.数据恢复,重传
9.流量控制,滑动窗口
TCP要先建立连接,系统中每打开一个进程,分配一个pid(系统中的编号,方便管理)其次分配一个端口号
端口号分为三类:
规定好的 :例如80 443等
系统随机分配 :客户端访问服务端时系统自动随机分配一个端口号给你
人类自由使用
TCP的面向连接在传数据前要先把数据传输通道打通
控制位:决定A和B目前处于什么状态(11种状态6位控制位)
ACK:确认位:确认前面字段号是否有效
SYN:同步位:建立连接时使用,用来同步序号
FIN :断开位:表示通知对方本端要关闭连接了, 标记数据是否发送完毕
通知对方我要关闭连接,标记数据是否发送完毕。如果FIN=1,告诉对方我已经发送完毕可以断开连接了
URG:紧急位:是否含有紧急数据
PSH:急切位:提示接收端应用程序应该立即从 TCP接收缓冲区中读走数据,为接收后续数据腾出空 间。
RST:重置位:释放连接,重新连接
tcp是面向连接的,就是说每次发送数据之前都要和对方建立一条可靠的连接,这个建立连接的过程分为3个步 骤,就叫做三次握手
第一步 :pc1会发送一个 建立连接的请求报文 :
第二步: 当pc2 收到消息以后 回复一个报文
第三步:收到 pc2 同意建立连接的报文后
1.会发送一个x+1报文
2.会告诉对方 我希望你下次 发送y+1的序号报文给我
3.最后 将ACK=1 封装进去
当客户端向服务器发送请求连接的报文时:
Seq序列号=x(x为随机) SYN=1(表示发送连接请求)
服务器端收到客户端发来的请求报文后,同意建立连 接,则向客户端发送确认报文:
Seq序列号=y(这时服务器也会产生一个序列号y,和客 户端的序号不相关)
Ack确认号=x+1(Seq序列号x+1,表示确认收到了客户 端的请求)
ACK=1(表示这是条确认请求)
SYN=1(同时也发送一个建立连接的请求) 客户端进程收到服务端进程的确认后,还要向服务端给 出确认,然后连接成功建立:
Seq序列号=x+1(这时客户端的序号为1)
Ack确认号=y+1(表示确认收到了服务器的连接请求)
ACK=1(表示这是确认报文)
有限状态机
1. CLOSED 没有任何连接状态
2. LISTEN 侦听状态,等待来自远方TCP端口的连接请求
3. SYN-SENT 在发送连接请求后,等待对方确认
4. SYN-RECEIVED 在收到和发送一个连接请求后,等待 对方确认
5. ESTABLISHED 代表传输连接建立,双方进入数据传 送状态
6. FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等 待对方确认
7. FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接 确认,等待对方发送关闭传输连接请求
8. TIME-WAIT 完成双向传输连接关闭,等待所有分组消 失
9. CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请 求,并已确认
10. LAST-ACK 被动关闭,等待最后一个关闭传输连接确 认,并等待所有分组消失
11. CLOSING 双方同时尝试关闭传输连接,等待对方确 认
客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1 状态,这时等待接收服务端报文,该报文会有三种可 能:
只有服务端的ACK
只有服务端的FIN
基于服务端的ACK,又有FIN
TCP超时重传:
异常网络状况下(开始出现超时或丢包),TCP控制数 据传输以保证其承诺的可靠服务 TCP服务必须能够重传超时时间内未收到确认的TCP报文 段。为此,TCP模块为每个TCP报文段都维护一 个重传定时器,该定时器在TCP报文段第一次被发送时 启动。如果超时时间内未收到接收方的应答, TCP模块将重传TCP报文段并重置定时器。至于下次重传 的超时时间如何选择,以及最多执行多少次重