网络协议OSI模型-TCP/IP-三次握手
OSI模型
在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际 标准组织(ISO),虽然它们工作领域不同,但随着科学技术的发展,通信与信息处理之间的界限开始 变得比较模糊,这也成了国际电信联盟电信标准化部门和ISO共同关心的领域。1984年,ISO发布了著 名的OSI(Open System Interconnection)标准,它定义了网络互联的7层框架,物理层、数据链路层、 网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型
层次划分的优点
- 各层之间相互独立,每一层只实现一种相对独立的功能,使问题复杂程度降低
- 灵活性好,各层内部的操作不会影响其他层
- 结构上可分割开,各层之间都可以采用最合适的技术来实现
- 易于实现和维护,因为整个系统已被分解成相对独立的子系统
- 能促进标准化工作,因为每一层的功能及其提供的服务都有了精确的说明
网络通信过程
客户段发送数据,模拟展开模型
服务器端接收,模拟展开模型
第7层 应用层
应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等
第6层 表示层
主条目:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。
数据的表示、安全、压缩
格式有,JPEG、ASCll、EBCDIC、加密格式等
第5层 会话层
会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接
建立、管理、终止会话
对应主机进程,指本地主机与远程主机正在进行的会话
第4层 传输层
传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议 等发送信息。例如:传输控制协议(TCP)等。
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
第3层 网络层
网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。 网络表头包含了网络数据。例如:互联网协议(IP)等。
TCP/IP协议
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议 TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
最早发源于1969年美国国防部(缩写为DoD)的因特网的前身ARPA网络项目,1983年1月1日,TCP/IP 取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
国防高级研究计划局DARPA与BBN技术公司、斯坦福大学和伦敦大学学院签约,在多个硬件平台上开发 协议的操作版本。 在协议开发过程中,数据包路由层的版本号从版本 1 进展到版本 4,后者于 1983 年 安装在 ARPANET 中。它被称为互联网协议版本4(IPv4)作为协议,仍在互联网使用,连同其目前的 继承,互联网协议版本6(IPv6)。
- Application Layer //应用层
- Transport Layer //传输层
- Internet Layer //网络层
- Link Layer(media-access) //网络接口层
![](https://img2022.cnblogs.com/blog/2789897/202204/2789897-20220422132827484-1880905217.png)
OSI与TCP/IP协议对比
![](https://img2022.cnblogs.com/blog/2789897/202204/2789897-20220422132459476-349912883.png)
TCP/IP和OSI模型的比较
- 相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
- 不同点
OSI是先有模型;TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同
TCP报文段的首部格式
序列号:建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,没发送一次数据,就[累加]一次该[数据字节数]的大小。用来解决网络包乱序问题。
确认号:指下一次[期望]收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题
控制位:
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规 定,连接建立后,ACK必须为1,带ACK标志的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报文段称为结束报文段
知识扩展
为什么需要TCP协议?TCP工作在那一层
IP层时不可靠的,它不保证网络包的交互,不保证网络包中的数据的完整性。
如果需要保障网络数据包的可靠性,那么就需要由上层(传输层的)的TCP协议来负责。 因为TCP是一个工作在传输层的可靠的数据传输的服务,它能确保接收端收到的网络包时无损坏、无间隔、非冗余和按序的
什么是TCP?
TCP是面向连接的、可靠的、基于字节流的传输层通信协议
面向连接:一定是一对一才能能连接,不能先UDP协议可以通知项多个主机发消息,也就是一对多是无法做到的;
可靠的:无论的网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定恩公偶到达接收端;
字节流:消息是没有边界的,所以无论我们消息由多大都可以进行传输。并且消息有序的,当前一个消息没有收到的时候,即使它先收到了后面的字节,那么也不饿能扔给应用层去处理,同时重复的报文会自动丢弃
建立三次握手 (甜蜜蜜)
TCP三次我数过程和状态变迁
TCP是面向连接的协议,所以使用TCP前必须先建立连接,而建立连接是通过三次握手来进行的。
一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态 1、客户端会随机初始化序号(client_isn),将此序号置于TCP首部的序号字段中,同时把SYN标志位置位 1 ,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,
表示项服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态
2、服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的序号字段中,其次把 TCP 首部的确认答应号字段填
入 client_isn +1,接着把 SYN 和 ACK 标志位置为 1。最后把报文发送给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD状态。 3、客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先应答报文 TCP 首部 ACK 标志位置为 1 ,其次确认答应号字段填入 server_isn +1,最后把报
文发送给服务端,这次报文可以携带客户到服务器的数据,也进入 ESTABLISHED 状态 服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态。
从上面的过程可以发现第三次握手是可以携带数据的,前两次握手时不可以携带数据的。
一旦完成三次握手,双方都处于 ESTABLISHED 状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。
四次挥手(分道扬镳)
TCP 四次挥手过程和状态变迁
天下没有不散的宴席,对于 TCP 连接也是这样,TCP断开连接时通过四次挥手方式。
双方都可以主动断开连接,断开连接后主机中的资源将被释放
客户端打算关闭,此时会发送一个 TCP 首部 FIN 标志被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。
客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态
等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。 客户端收到服务端 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
服务器收到了 ACK 应答报文后,就进入了 CLOSED 状态,至此服务端已经完成连接的关闭。
客户端在经过 2MSL 一段时间后,自动进入 CLOSED 状态,至此客户端也完成连接的关闭。
每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手
注意:主动关闭连接,才有TIME_WAIT状态
UDP和TCP区别
UDP 不提供的控制机制,利用 IP 提供面向无连接的通信服务。
UDP 协议真的非常简,头部只有 8 个字节(64位),UDP的头部格式如下:
- 目标和源端口:主要时告诉UDP协议应该把报文发送给哪个进程。
- 包长度:该字段保存了UDP首部的长度跟数据的长度之和。
- 校验和:校验和是为了提供可靠的UDP首部和数据而设计。
TCP和UDP两者的区别:
1、连接
TCP是面向连接的传输层协议,传输数据前先要建立连接
UDP是不需要连接,即刻传输数据
2、服务对象
TCP 是一对一的两点服务,即一条连接只有两个端点。
UDP支持一对一,一对多,多对多的交互通信
3、可靠性
TCP是可靠交互数据的,数据可以无差错、不丢失、不重复、按需到达
UDP是精良最大努力交互,不保证可靠交付数据
4、拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使网络非常拥堵了,也不会影响UDP的发送速率
5、首部开销
TCP 首部长度较长,会有有一定的开销,首部在没有使用选项字段时时 20 个字节,如果使用了选项字段则会变长的。 UDP首部只有 8 个字节,并且时固定不变的,开销较小。
6、传输方式
TCP 是流式传输,没有边界,但保证顺序和可靠
UDP是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
7、分片不同
TCP 的数据大小如果大于MSS大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
UDP 的数据大小如果大于MTU大小,则会咋IP层进行分片,目标主机收到后,在IP层组装完数据,接着再传给传输层,但是如果中途丢了一个片,则就需要重传所有的数
据包,这样传输效率非常差,所以通常UDP的报文应该小于MTU
TCP和UDP应用场景
由于TCP是面向连接,能保证数据的可靠性交互,因此经常用于:
- FTP 文件传输
- HTTP / HTTPS
由于UDP面向无连接,它可以随时发送数据,再加上UDP本身的处理即简单又高效,因此经常用于:
- 包总量较少的通信,如 DNS、SNMP 等
- 视频、音频等多媒体通信
- 广播通信