网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手
网络的五层划分是什么?
- 应用层,常见协议:HTTP、FTP
- 传输层,常见协议:TCP.UDP
- 网络层,常见协议:IP
- 链路层
- 物理层
TCP 和 UDP 的区别是什么
- TCP/UDP 都属于传输层的协议
- TCP 是面向
连接
的传输层协议,能够准确可靠
的把数据传递给对方,当数据有丢包情况会重发,但是需要在建立和断开连接需要至少7次的发包和收包,会浪费网络流量
,主要用在对可靠性要求较高的地方。 - UDP 是面向
无连接
的传输层协议,意思是只负责传输数据,不能确保
对方是否收到数据和数据的正确顺序,数据的正确性由应用层来校验。主要用于高速传输和实时性要求较高的场合如音视频会议,广播。
TCP 三次握手和四次挥手
- 先来张时序图
- 来张自己使用
wireShark
抓取的tcp
数据包和wireShark
生成的流量图- 数据包(三次握手是完整的,四次挥手不完整,丢了一个包)
- 流量图(三次握手是完整的,四次挥手不完整,丢了一个包)
- 数据包(三次握手是完整的,四次挥手不完整,丢了一个包)
序号,确认号
- 序列号 Sequeuece number(Seq): 数据包本身的序列号,初始序列号是随机的。
- 确认号 Acknowledgment number(Ack): 在接收端,用来通知发送端数据成功接收
- 标志位,标志位只有为
1
的时候才有效- SYN: 创建一个连接
- ACK: 确认接收到的数据
- FIN: 终结一个连接
TCP 三次握手
- TCP 三次握手图
- 第一次握手:客户端向服务器端发送报文,报文中设置标志位
SYN=1
,生成随机序列号Seq = x
,这时客户端进入SYN_SENT
状态。
- 第二次握手: 服务器端收到客户端的报文,由
SYN=1
可以知道客户端请求建立连接。服务器端给客户端发送报文,设置标志位SYN=1,ACK=1
, 生成随机序列号Seq=y
,设置确认号Ack = x+1
,这是服务器端进入SYN_RCVD
状态
- 第三次握手: 客户端接收到服务器的报文,检查
ACK
是否为1
,Ack
是否为x+1
, 如果正确则将标志位ACK
置为1
,Ack
置为y+1
,并将该数据包发送给服务器端,服务器端检查ACK
是否为1
,Ack
是否为y+1
,如果正确则连接建立成功,服务器端和客户端进入ESTABLISHED
状态,完成三次握手。
- 为什么需要三次握手,两次确认?
- 为什么客户端还要发送一次确认呢,主要是为了防止已失效的连接请求报文突然又传送到了服务器端,造成错误。比如:客户端发送连接请求,因为网络或者一些其他因素造成没有在一定时间到达服务器端,所以客户端没有收到确认。于是客户端会重发一次连接请求,通过三次握手与服务器建立连接,但是这时上次的请求到达服务器端了,服务器会误以为客户端又发来了一次新的连接请求,会向客户端发送报文同意建立连接,但是客户端已经建立了,就会放弃掉该报文,服务器端没有收到响应,也就不会建立连接了。
TCP 四次挥手
- 四次挥手数据包
- 四次挥手流量图
- 由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这一原则是当一方数据发送完成,发送一个标志位为 FIN 的报文来终止这一方向的连接,收到标志位为 FIN 的报文意味着这一方向上不会再收到数据了。但是在 TCP 连接上仍然能够发送数据,直到这一方向也发送了 FIN 。发送 FIN 的一方执行主动关闭,另一方则执行被动关闭。
- 第一次挥手:客户端发送报文,标志位
FIN =1
,Seq = n
,此时客户端进入到FIN_WAIT_1
状态,表示客户端没有数据要发送给服务器
- 第二次挥手:服务端收到客户端发送的
FIN
报文,然后向客户端发送一个报文,设置标志位为ACK =1
,确认序列号为Ack = n+1
,这是服务端进入CLOSE_WAIT
状态.表示客户端到服务端的发送连接已经断开。
- 第三次挥手:服务器发送报文到客户端,报文标志位
FIN =1
序列号为Seq = m
,用来关闭服务器到客户端的数据传输,服务端进行LAST_ACK
状态
- 第四次挥手:客户端收到服务器发送的标志位为 FIN 的报文,客户端进入到 CLIENT_WAIT 状态,等待
2MSL
时间。然后发送一个标志位为 ACK = 1 的报文,确认序列号为Ack = m+1
。完成四次挥手。
- 为什么要等待
2MSL
- 客户端发送的第4次握手报文,服务器没有收到。这时候服务器端会再次发送一个 FIN =1 的报文,而这个时候客户端还处于 CLIENT_WAIT 状态,所以可以再次发送确认消息。
TCP 发送失败重发情况
- 抓包环境
- whireShark: 2.6.1
- Android device: HTC D820U
- Android Version: 6.0
- Android IP : 192.168.123.103
- Destination IP : 183.192.196.182
https://blog.csdn.net/sssnmnmjmf/article/details/68486261
https://blog.csdn.net/oney139/article/details/8103223
https://www.jianshu.com/p/9f3e879a4c9c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手的更多相关文章
- 转 TCP/IP的三次握手与四次挥手详解
TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...
- TCP/IP的三次握手与四次挥手详解
TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...
- 2.TCP/IP的三次握手与四次挥手
参考文章:http://357742954.blog.51cto.com/368705/1317226 TCP(Transmission Control Protocol) 传输控制协议,是一个面向连 ...
- TCP 中的三次握手和四次挥手
Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
- TCP为什么做三次握手、四次挥手
TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
[摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- tcp为什么要三次握手,四次挥手
tcp为什么要三次握手,tcp为什么可靠. 为什么不能两次握手:(防止已失效的连接请求又传送到服务器端,因而产生错误) 假设改为两次握手,client端发送的一个连接请求在服务器滞留了,这个连接请求是 ...
- TCP为什么要三次握手和四次挥手
http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试 ...
随机推荐
- linux 端口转发
一 从一台机到另一台机端口转发 启用网卡转发功能#echo 1 > /proc/sys/net/ipv4/ip_forward 举例:从192.168.0.132:21521(新端口)访问192 ...
- 如何去掉browserLinkSignalR
在使用vs开发时查看源代码可以发现最下面有以下代码,此段代码会一直请求网络,感觉不爽的可以这样去掉: <!-- Visual Studio Browser Link --> <scr ...
- java 文件复制
java实现文件复制 CreateTime--2017年9月7日15:04:48 Author:Marydon 1.需求 根据原文件复制一份到指定位置 2.代码实现 需要导入: import ja ...
- 关于RSA加密算法的工具类
关于RSA加密算法的工具类 最近在捣鼓SSO(单点登录),就是一个在应用(系统)登录之后,当切换其他应用(系统)的时候,可以省去登录,提高用户的使用的便捷.(具体有时间在写) 期间涉及的安全问题,发送 ...
- Android Studio 错误: 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum
在导入eclipse项目到Android Studio出现这种错误, 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum.查阅后了解到Eclipse能够智能 ...
- iOS Main Thread Checker: UI API called on a background thread的解释
Xcode打印栏出现如下警告: Main Thread Checker: UI API called on a background thread 这个是什么错误呢? 其实这并不一定是错误,也可以理解 ...
- 是否只查看安全传送的网页内容? 去掉 IE弹出窗口
选择IE工具intemt选项,在选项卡里选择安全,然后在安全选项卡里点自定义级别,在设置里找到‘其他’这个分类,在次分类下找到‘显示混合内容’选择‘启用’然后保存退出就OK了,当然楼上几位说安全问题, ...
- linux下软链接与硬链接及其区别
linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...
- Error 25007.初始化合成时发生错误。安装程序无法使用 LoadLibraryShim() 加载合成。
安装“Microsoft .NET Framework 2.exe”报错如下: c:\windows\microsoft.net\framework\...类似这种错误都因 .NET Framewor ...
- 【jsp】Servlet与jsp之间的传值
Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP. 通过对象 request和 session (不考虑 application) ...