- OIS七层网络模型
应用层 | 为应用程序提供服务 |
表示层 | 数据格式化,数据加密 |
会话层 | 建立、管理和维护会话 |
传输层 | 建立、管理和维护端到端的连接 |
网络层 | ip选址及路由选择 |
数据链路层 | 提供介质访问和链路管理 mac地址(网卡) |
物理层 | 物理介质(网线,光纤) |
TCP协议和UDP协议
- 相同点:都在传输层,目标都是在程序之前传输数据(文本文件、图片视频)
- 区别:TCP属于连接的,UDP属于非连接的
- TCP:确认连接的三个点:三次握手、传输确认、四次挥手
三次握手建立连接(为了在不可靠的信道上进行可靠的连接断开确认)
(可双向连接)
原理:握手1、假设客户端发送一个请求数据包(SYN)给服务端,询问能否与之建立连接
握手2、如果服务端同意连接就会回复SYN+ACK包
握手3、客户端收到后就会返回一包ACK包后,连接建立。
问题:1、为什么是三次握手不是两次
原因:为了防止已失效的请求报文突然又传到服务器引起错误,假设只有两次握手,客户端发送SYN1给服务端,因为某些未知原因并未达到服务器,在中间的某个网络节点进行滞留,为了建立连接客户端会重发SYN2包,送法后服务端发送SYN+ACK给客户端后建立连接,但第一包SYN1突然恢复,这时候服务端会以为是客户端发送的一个新连接,从而在两次握手后进入等待状态,如果在三次握手的情况下,客户端没有收到服务端的ACK,自然不会认为是连接建立成功。
SYN:连接请求数据标识符
ACK:回复确认标识符=序列号+长度
四次挥手关闭连接 (为了在不可靠的信道上建立可靠的连接)
(可双向关闭)
原理:挥手1、假设客户端发起一个关闭连接请求(FIN)给服务端,然后客户端进行等待状态1
挥手2、服务端给客户端发送一个ACK包后进行关闭等待状态,客户端收到后进行等待状态2
挥手3、服务端发送一个FIN给客户端后进行最后确认状态
挥手4、客户端回复ACK包后进入超时等待状态,经过超时等待后关闭连接,而服务端收到 ACK后立刻关闭连接
问题:1、为什么要设置超时等待
原因:为了确保对方真的收到ACK,假设客户端发送ACK包后就释放连接,如果ACK在中途丢失,那么服务端将不会关闭连接,停留在最后确认状态,如果服务端没有收到ACK包,那么会重新发一次FIN包,客户端会重发ACK和刷新超时时间。
FIN:关闭连接包
该篇为学习记录,学习连接如下: