https://img-blog.csdnimg.cn/20201227123737162.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="来源于科来网络通讯协议图" />
上图来源于 科来网络通讯协议图
https://img-blog.csdnimg.cn/20201227124726751.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" />
结合 OSI 和 TCP/IP 的优点,采⽤⼀种只有五层协议的体系结构。
应用层
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应⽤层协议定义的是应⽤进程(进程:主机中正在运⾏的程序)间的通信和交互的规则。对于不同的⽹络应⽤需要不同的应⽤层协议。在互联⽹中应⽤层协议很多,如域名系统DNS,⽀持万维⽹应⽤的 HTTP协议,⽀持电⼦邮件的 SMTP协议等等。我们把应⽤层交互的数据单元称为报文。
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应⽤进程利⽤该服务传送应⽤层报⽂。“通⽤的”是指并不针对某⼀个特定的⽹络应⽤,⽽是多种应⽤可以使⽤同⼀个运输层服务。
运输层主要使用以下两种协议
- 传输控制协议 TCP(Transmission Control Protocol)–提供⾯向连接的,可靠的数据传输服
务。 - ⽤户数据协议 UDP(User Datagram Protocol)–提供⽆连接的,不可靠的数据传输服务。
TCP,UDP 协议的区别
https://img-blog.csdnimg.cn/20201227141847150.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" />
TCP 提供⾯向连接的服务。在传送数据之前必须先建⽴连接,数据传送结束后要释放连接。 TCP 不提供⼴播或多播服务。由于 TCP 要提供可靠的,⾯向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握⼿来建⽴连接,⽽且在数据传递时,有确认、窗⼝、重传、拥塞控制机制,在数据传完后,还会断开连接⽤来节约系统资源),这⼀难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的⾸部增⼤很多,还要占⽤许多处理机资源。TCP ⼀般⽤于⽂件传输、发送和接收邮件、远程登录等场景。
UDP 在传送数据之前不需要先建⽴连接,远地主机在收到 UDP 报⽂后,不需要给出任何确认。虽然UDP 不提供可靠交付,但在某些情况下 UDP 确是⼀种最有效的⼯作⽅式(⼀般⽤于即时通信),⽐如: QQ 语⾳、 QQ 视频 、直播等等。
网络层
在计算机⽹络中进⾏通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信⼦⽹。⽹络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,⽹络层把运输层产⽣的报⽂段或⽤户数据报封装成分组和包进⾏传送。在 TCP/IP 体系结构中,由于⽹络层使⽤IP协议,因此分组也叫IP数据报 ,简称数据报。
数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在⼀段⼀段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将⽹络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每⼀帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
物理层
在物理层上所传送的数据单位是⽐特。 物理层(physical layer)的作⽤是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上⾯的数据链路层不必考虑⽹络的具体传输介质是什么。“透明传送⽐特流”表示经实际电路传送后的⽐特流没有发⽣变化,对传送的⽐特流来说,这个电路好像是看不⻅的。
TCP 三次握手和四次挥手
三次握手
1.客户端–发送带有 SYN 标志的数据包–服务端
2.服务端–发送带有 SYN/ACK 标志的数据包–客户端
3.客户端–发送带有 ACK 标志的数据包–服务端
https://img-blog.csdnimg.cn/2020122714012989.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" />
四次挥手
1.客户端-发送⼀个 FIN,⽤来关闭客户端到服务器的数据传送
2.服务器-收到这个 FIN,它发回⼀个ACK,确认序号为收到的序号加1。和 SYN ⼀样,⼀个
FIN 将占⽤⼀个序号
3.服务器-关闭与客户端的连接,发送⼀个FIN给客户端
4.客户端-发回 ACK 报⽂确认,并将确认序号设置为收到序号加1
https://img-blog.csdnimg.cn/20201227140716714.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" />
任何⼀⽅都可以在数据传送结束后发出连接释放的通知,待对⽅确认后进⼊半关闭状态。当另⼀⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了TCP连接。