网络协议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) //网络接口层
OSI与TCP/IP协议对比
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 等
- 视频、音频等多媒体通信
- 广播通信
网络协议OSI模型-TCP/IP-三次握手的更多相关文章
- 网络协议HTTP、TCP/IP、Socket
网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...
- 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
- 31.TCP/IP 三次握手与四次挥手
TCP/IP三次握手 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手 ...
- TCP/IP 三次握手,四次断开
TCP/IP 三次握手,四次断开 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图 ...
- WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析
WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...
- 需要知道的TCP/IP三次握手
TCP/IP三次握手是TCP协议中比较重要的一个知识点,但是在很多博客中看到的三次握手的过程图很多都不是很正确.我在google找到了一篇写的非常不错的介绍TCP/IP技术文章期中就有三次握手的讲解, ...
- 使用tcpdump探测TCP/IP三次握手
读计算机应该就同说过TCP/IP三次握手,但是都没有去验证过,今天心血来潮,去验证了一下,于是乎写下了这篇博客,可能写的可能有问题,还请多多指教 包括我学习,还有从很多资料来看资料,第三次握手,应该会 ...
- TCP/IP三次握手与四次挥手的正确姿势
0.史上最容易理解的:TCP三次握手,四次挥手 https://cloud.tencent.com/developer/news/257281 A 理解TCP/IP三次握手与四次挥手的正确姿势http ...
- OSI模型 & TCP/IP模型
分层思想 分层思想:将复杂 的流程分解 为几个功能相对单一 的子过程 整个流程更加清晰 ,复杂问题简单化 更容易发现问题并针对性的解决问题 分层思想在网络中的应用 OSI模型 国际标准化组织(Inte ...
随机推荐
- phpstorm+xdebug调试详细教程
对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了.不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作.这些都是死的,好说.但是对于Xdebug ...
- Thymeleaf使用遇见的问题,如字符串不相等
所属情况:内联JavaScript语言 当使用Thymeleaf取请求参数的值时,会出现数组符号包围值的问题,可通过[0]进行取出里面的字符串,取值之前需先判断值是否存在,不然会抛出索引0不存在问题 ...
- Windows常用快捷操作
Windows操作系统作为目前最广泛使用的PC端OS,掌握一些快捷键,方便快速在Windows系统下进行操作. 下面收集整理了一些常用的快捷操作: Ctrl + A 全选 Ctrl + C 复 ...
- 安装Prettier
安装Prettier Prettier是优化代码格式的工具,可优化JavaScript.TypeScript.JSON等代码及配置文件. 使用命令yarn add -D --exact prettie ...
- Vue小说阅读器(仿追书神器)
一个vue阅读器项目,目前已升级到2.0,阅读器支持横向分页并滑动翻页(没有动画,需要动画的可以自己设置,增加transitionDuration即可) 技术栈 vue全家桶+mint-ui gith ...
- CSS:两端对齐原理(text-align:justify)
我是一个小白我是一个小白我是一个小白喷我吧,哈哈 写样式的是时候经常会碰到字体两端对齐的效果,一般就网上找端css样式复制下就结束了,没有考虑过原理是啥贴下代码 <head> <me ...
- Python 图_系列之基于邻接炬阵实现广度、深度优先路径搜索算法
图是一种抽象数据结构,本质和树结构是一样的. 图与树相比较,图具有封闭性,可以把树结构看成是图结构的前生.在树结构中,如果把兄弟节点之间或子节点之间横向连接,便构建成一个图. 树适合描述从上向下的一对 ...
- Java 请求转发和重定向的区别以及JavaWeb三大作用域
三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...
- 以&#开头的是什么编码?
今天遇到了一个网页时繁体的,它的title和meta信息在浏览器中显示正常,但是查看其源码是却是"最新發"这种. 在网上找了半天资料,终于搞明白了. 以在网页中&#开头的是 ...
- vue-cli打包后dist文件运行空白和背景图显示问题详解
1.文件引用路径.我们直接运行打包后的文件夹中的index.html文件,会看到网页一片空白,f12调试,全是css,js路径引用错误的问题. 解决:到config文件夹中打开index.js文件. ...