传输层是国际标准化组织提出的开放系统互连(OSI)参考模型中的第四层。该层协议为网络端点主机上的进程之间提供了可靠、有效的报文传送服务。其功能紧密地依赖于网络层的虚拟电路或数据报服务。传输层定义了主机应用程序之间端到端的连通性。传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层,因为它是源端到目的端对数据传送进行控制从低到高的最后一层。

传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol) 。传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。

     本篇文章主要讲述传输层协议TCP连接的建立(三次握手)和断开(四次挥手),与路由器的数据转发原理(封装过程)。

1、TCP建立连接的过程称为三次握手,我们可以通过下图来了解TCP三次握手的过程:

从图上我们可以看出,PC1要与PC2建立通讯连接,要经过3个步骤,这个三个步骤我们就称为三次握手。经过这3个握手PC1和PC2才可以真正通讯,传输数据。

首先我们要先了解在TCP报文格式中比较重要的几个标志位,①、ACK:确认位(确认序号位,当该位为1时,用于确认发送方的数据)。②、SYN:建立连接的请求标记(同步序号位,TCP需要建立连接时将该值设为1)。③、FIN:请求断开标记(当TCP断开连接时将该位置为1)。这里我们主要了解这三个标志位。

当PC1想要与PC2建立连接时,从图中可以看到PC1首先发送SYN报文,该位置为1,请求与PC2建立连接,这个时候PC2接收到请求,通过查看SYN报文位置知道PC1想要建立连接,PC2回应PC1请求,并发送建立连接请求(两台PC机建立通讯是双向的,当一台PC请求建立连接时,另一台PC同样会请求建立连接),PC2发送SYN+ACK报文,该位置同样为1,PC1接受到PC2确认回应与请求后确认PC2信息位置,然后回复确认,发送ACK报文,位置为1。经过这3次握手过程,PC1与PC2成功建立连接。

2、TCP断开连接的四次挥手,我们可以通过下图来了解TCP四次挥手的过程:

上图中我们可以看到PC1和PC2断开连接的过程其实和上面我们讲述的TCP三次握手的过程差不多,不过中间多了一个步骤3,这里也就是我们要理解的TCP半关闭的概念,我们可以通过关闭浏览网站这个过程来理解TCP半关闭的概念,同时来阐述TCP断开连接四次挥手的过程。

在这里我们把PC2看做是一台服务器,当我们在浏览网页时,数据是双向传输的,PC1发起请求,服务器响应请求并发送数据提供PC1浏览查看,当PC1关闭浏览器时,首先发送FIN/ACK报文,位置位为1,确认关闭连接,服务器接收请求,然后发送ACK报文,位置为1,确认请求,这个时候PC1关闭浏览器窗口,但是服务器还没有断开与PC1的连接,还会继续向PC1发送数据,断开的只是PC1单向的连接,这也就是TCP半关闭状态,当PC1断开连接后,服务器重复PC1操作,发送FIN/ACK报文,位置为1,请求确认断开连接,PC1接收到服务器请求,并发送ACK报文,位置为1,确认请求,这个时候服务器与PC1断开连接,经过这四个步骤,PC1与服务器(PC2)断开连接,这就是我们说的TCP断开连接的四次挥手。

3、路由器的数据转发原理(封装过程),通过下图来讲述路由器的数据转发原理:

路由器转发封装过程我们也称之为路由器的重封装过程,如上图所示,主机A要把数据发送给主机B要经过两个路由的转发来完成,在这个转发过程中是经过三个不同网段的转发最终到达主机B,在同一个段中传输时就是数据链路层(二层)的工作原理,数据链路层是以数据帧的格式通过封装源MAC地址与目标MAC地址发送ARP寻找目标MAC地址进行转发,如上图,主机A发送数据到主机B,要经过三个不同的网段通过两次重封装来完成数据发送。
①、首先主机A通过ARP,找到默认网关路由A的MAC地址,然后封装源IP地址(192.168.1.2/24)与目标IP地址(192.168.2.2/24),源MAC地址(…11-11),目标MAC地址(…22-22),经过E0端口发送到路由A中。
②、路由A接收到数据,通过解析MAC地址,查看主机A发过来的目标IP地址,在路由表中查找目标IP网段,当查找到这个网段后,知道应该从E1接口转发出去,然后路由A重新封装MAC地址,源IP地址与目标IP地址不变,这个时候封装的源MAC地址为…33-33,目标MAC地址为:…44-44,通过E1接口发送给路由B。
③、路由B接受到数据后与路由A同样操做,解封MAC地址,查看目标IP地址,同时在路由表中查找目标IP网段,找到目标IP网段接口E0,然后通过ARP,获得主机B的MAC地址,并封装MAC地址,源MAC地址为…55-55,目标MAC地址为…66-66,源IP地址与目标IP地址不变,通过E0接口转发到主机B,这个时候主机B接受到主机A发过来的数据,通过解析MAC地址,查看源IP与目标IP地址,确定是否是发给自己的数据。

通过上面所述的过程通过三次重新封装MAC地址,源IP地址与目标IP地址不变,完成数据的转发,这就是路由器的重封装过程,也就是路由器的数据转发原理(封装过程)。

TCP的三次握手和四次挥手与路由器(三层)转发原理的更多相关文章

  1. TCP的三次握手与四次挥手

    TCP的三次握手与四次挥手 一.TCP(Transmission Control Protocol 传输控制协议) TCP是面向对连接,可靠的进程到进程通信的协议 TCP是提供全双工服务,即数据可在同 ...

  2. 你应该这么理解TCP的三次握手和四次挥手

    前言: TCP协议是计算机的基础,他本身是一个非常非常复杂的协议. 本文只是蜻蜓点水,将从网络基础以及TCP的相关概念介绍开始,之后再将三次握手,四次挥手这些内容来阐述. 最后介绍一些常见问题,并给出 ...

  3. TCP/IP三次握手与四次挥手的正确姿势

    0.史上最容易理解的:TCP三次握手,四次挥手 https://cloud.tencent.com/developer/news/257281 A 理解TCP/IP三次握手与四次挥手的正确姿势http ...

  4. TCP的三次握手与四次挥手详解

    TCP的三次握手与四次挥手是TCP创建连接和关闭连接的核心流程,我们就从一个TCP结构图开始探究中的奥秘  序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序 ...

  5. 【图解】给面试官解释TCP的三次握手与四次挥手-Web运用原理及网络基础

    作者 | Jeskson 来源 | 达达前端小酒馆 轻松了解HTTP协议 为什么要学习网络协议呢?为什么要学习计算机完了呢?显然这很重要,至少能够帮助你找到工作的原因之一,学习网络知识点太多太多,没有 ...

  6. TCP的三次握手与四次挥手笔记

    TCP的三次握手与四次挥手笔记 TCP Flags URG: 紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 FIN: finish ...

  7. TCP的三次握手与四次挥手理解及面试题

    TCP的三次握手与四次挥手理解及面试题(很全面) 转载自:https://blog.csdn.net/qq_38950316/article/details/81087809 本文经过借鉴书籍资料.他 ...

  8. TCP 的三次握手和四次挥手

    参考资料: 1.TCP的三次握手与四次挥手理解及面试题: 2.Http协议三次握手和四次挥手: 3.TCP通信的三次握手和四次撒手的详细流程(顿悟) 前置: 序号(也称序列号) - Sequence ...

  9. WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析

    WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...

随机推荐

  1. 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢

    Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...

  2. 从零开始封装React UI 组件库并发布到NPM

    github 开源地址:zswui github 说明文档:wiki 1.新建目录wui (1)进入到 wui 目录 执行 npm init 命令初始化项目.更具提示信息填充将会生成的 package ...

  3. 【Leetcode_easy】942. DI String Match

    problem 942. DI String Match 参考 1. Leetcode_easy_942. DI String Match; 完

  4. API SendMessage 带参数

    代码未测试 [DllImport("USER32", EntryPoint = "SendMessage", CharSet = CharSet.Auto, S ...

  5. python 多线程模板简单实现

    #-*- encoding: UTF-8 -*- #编码声明 import threading,Queue,os import time #导入方法模块 def main(inargs): work_ ...

  6. iOS 获取设备的唯一标识

    有时候,我们需要记录一下设备的唯一标识,比如标识这个设备是不是已经发过促销券了或者是否下载试用过app等等.最简单 的方法就是获取设备的UDID#[UIDevice currentDevice] un ...

  7. yarn 的常用命令

    初始化新项目yarn init添加依赖包yarn add [package]yarn add [package]@[version]yarn add [package]@[tag]将依赖项添加到不同依 ...

  8. 理解Hybrid接口的应用

    Hybrid接口既可以连接普通终端的接入链路又可以连接交换机间的干道链路,特允许多个vlan的帧通过,并可以在出接口方向将某些vlan帧的标签剥掉. 通过配置Hybrid接口,能过实现对VLAN标签的 ...

  9. Pytorch 网络结构可视化

    安装 conda install graphvizconda install tensorwatch 载入库 import sysimport torchimport tensorwatch as t ...

  10. [转帖]Dockerfile: ENTRYPOINT和CMD的区别

    Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...