网络的五层划分是什么?

  • 应用层,常见协议: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 三次握手图
  1. 第一次握手:客户端向服务器端发送报文,报文中设置标志位SYN=1,生成随机序列号 Seq = x,这时客户端进入 SYN_SENT 状态。
  2. 第二次握手: 服务器端收到客户端的报文,由 SYN=1 可以知道客户端请求建立连接。服务器端给客户端发送报文,设置标志位 SYN=1,ACK=1, 生成随机序列号 Seq=y,设置确认号 Ack = x+1 ,这是服务器端进入 SYN_RCVD 状态
  3. 第三次握手: 客户端接收到服务器的报文,检查 ACK 是否为 1Ack 是否为 x+1 , 如果正确则将标志位 ACK 置为 1Ack 置为 y+1,并将该数据包发送给服务器端,服务器端检查 ACK 是否为 1Ack 是否为 y+1,如果正确则连接建立成功,服务器端和客户端进入 ESTABLISHED 状态,完成三次握手。
  • 为什么需要三次握手,两次确认?

    • 为什么客户端还要发送一次确认呢,主要是为了防止已失效的连接请求报文突然又传送到了服务器端,造成错误。比如:客户端发送连接请求,因为网络或者一些其他因素造成没有在一定时间到达服务器端,所以客户端没有收到确认。于是客户端会重发一次连接请求,通过三次握手与服务器建立连接,但是这时上次的请求到达服务器端了,服务器会误以为客户端又发来了一次新的连接请求,会向客户端发送报文同意建立连接,但是客户端已经建立了,就会放弃掉该报文,服务器端没有收到响应,也就不会建立连接了。

TCP 四次挥手

  • 四次挥手数据包
  • 四次挥手流量图
  • 由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这一原则是当一方数据发送完成,发送一个标志位为 FIN 的报文来终止这一方向的连接,收到标志位为 FIN 的报文意味着这一方向上不会再收到数据了。但是在 TCP 连接上仍然能够发送数据,直到这一方向也发送了 FIN 。发送 FIN 的一方执行主动关闭,另一方则执行被动关闭。
  • 第一次挥手:客户端发送报文,标志位 FIN =1Seq = 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三次握手和四次挥手的更多相关文章

  1. 转 TCP/IP的三次握手与四次挥手详解

    TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...

  2. TCP/IP的三次握手与四次挥手详解

    TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...

  3. 2.TCP/IP的三次握手与四次挥手

    参考文章:http://357742954.blog.51cto.com/368705/1317226 TCP(Transmission Control Protocol) 传输控制协议,是一个面向连 ...

  4. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...

  5. TCP为什么做三次握手、四次挥手

    TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...

  6. 详解TCP连接的“三次握手”与“四次挥手”(下)

    上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...

  7. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

  8. 详解TCP连接的“三次握手”与“四次挥手”(上)

    一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...

  9. tcp为什么要三次握手,四次挥手

    tcp为什么要三次握手,tcp为什么可靠. 为什么不能两次握手:(防止已失效的连接请求又传送到服务器端,因而产生错误) 假设改为两次握手,client端发送的一个连接请求在服务器滞留了,这个连接请求是 ...

  10. TCP为什么要三次握手和四次挥手

    http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试 ...

随机推荐

  1. Maven项目目录结构与自动创建maven目录

    Maven项目有特定的目录结构: 如图,我们在创建一个maven工程时,在项目根目录下有三大内容:main.test.pom.xml. 其中:main文件夹下是项目的主要源代码,按照包路径来存放 te ...

  2. Java多线程之Semaphore信号量

      转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6557874.html  学过操作系统的对 信号量 这个词应该不陌生,它是用来进行进程间通信,控制对 临界区 ...

  3. 仿饿了么增加购物车旋转控件 - 自带闪转腾挪动画 的button

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/54235736 本文出 ...

  4. Web网站错误提示页面和默认訪问页面设置

    1.asp.net 定制简单的错误处理页面 通常web应用程序在公布后.为了给用户一个友好界面和使用体验,都会在发生错误时跳转至一个自己定义的错误页面,而不是asp.net向用户暴露出来的具体的异常列 ...

  5. hbuilder mui uploader图片上传到服务器完整版(ASP.NET)

    html布局,比较简单,模仿微信的: <div class="dynamic_images"> <ul> <!--<li><img  ...

  6. mysql统计函数

    数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个 ...

  7. django之创建第10个项目-图片上传方式1

    1.upload.HTMl <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang=& ...

  8. 解决打开bootstrap模态框抖动问题

    //打开模态框 function modalOpen(){ $('body').css("overflow", "hidden"); } //关闭模态框 fun ...

  9. 基于swagger进行接口文档的编写

    0. 前言 近期忙于和各个银行的代收接口联调,根据遇到的问题,对之前编写的接口进行了修改,需求收集和设计接口时想到了方方面面,生产环境下还是会遇到意想不到的问题,好在基本的执行逻辑已确定,因此只是对接 ...

  10. 关于新加坡IT薪酬和找工作网站

    关于新加坡IT薪酬 很多朋友发邮件或留言问我关于新加坡IT薪酬的问题,由于前段时间比较忙,所以没有及时一一回复,在此表示抱歉. 新加坡IT薪酬范围大概如下(月薪,新加坡币对人民币为1:5): Juni ...