首页 > 编程语言 >unix网络编程1.1——TCP协议详解(一)

unix网络编程1.1——TCP协议详解(一)

时间:2022-11-19 23:34:43浏览次数:74  
标签:协议 1.1 接收端 TCP 传输 unix 应用程序 数据

目录

前言

IP: 网络层具有不稳定性(与硬件联系紧密)
传输层:
1.完全不弥补——UDP
2.完全弥补——TCP

网络7层协议与4层协议

image

  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
  2. 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
  3. 网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
  4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
  6. 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
  7. 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

TCP/IP四层模型

  • TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示:
    image

通信过程

  • 两台计算机通过TCP/IP协议通讯的过程如下所示:
    image
  • 上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示:
    image
  • 了解部分:
链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发
	
网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Inter-net上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。

网络层负责点到点(ptop,point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(etoe,end-to-end)的传输(这里的“端”指源主机和目的主机)。传输层可选择TCP或UDP协议。

TCP与UDP的区别:

TCP:

  • TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。

UDP:

  • UDP是无连接的传输协议,不保证可靠性,有点像寄信,信写好放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件寄送顺序。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。

CS模型-TCP总览

image

数据进入协议栈时的封装过程

TCP数据格式

image

TCP三次握手

通信时序图

image

image
从客户端第一次给服务端发包看数据包的变化:
image

image

TCP四次挥手

半关闭

通话中,我的事儿都说完了,你还有话要说吗?
image

TCP流量控制(滑动窗口)

  • 介绍UDP时我们描述了这样的问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。TCP协议通过“滑动窗口(Sliding Window)”机制解决这一问题。看下图的通讯过程:
    image
  1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。发送端应答,三方握手结束。

  2. 发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。

  3. 接收端的应用程序提走2K数据,接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。

  4. 接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。

  5. 发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位。

  6. 接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。

  7. 接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。

  8. 接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。

  9. 接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。

  • 上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。

  • 从这个例子还可以看出,发送端是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据。也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是一个数据包有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据,这一点和TCP是很不同的。

通过滑动窗口图看TCP状态转换:
image

TCP状态转换图

image

主动 发起和关闭连接

详情见图中红线描述:
image

被动 发起和关闭连接

半关闭

shutdown

端口复用

2MSL

其他

MTU与MSS

参考:https://www.cnblogs.com/alan666/p/8311901.html
MTU:最大传输单元
MSS: 最大分节大小
MTU = MSS + TCP Header + IP Header.
MTU:maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节。
MSS:maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据。MSS值为MTU值减去IPv4 Header(20 Byte)和TCP header(20 Byte)得到。
回顾数据进入协议栈的封装过程:
image

协议上限分析

image

以太网:1500
IP:65535 2^16
image

标签:协议,1.1,接收端,TCP,传输,unix,应用程序,数据
From: https://www.cnblogs.com/kongweisi/p/16882787.html

相关文章

  • 11.19小记
    上午参加洛谷模拟赛,想了3hT1仍不会正解,想着打个暴力拿80,没想到数组开小只有60,开大之后就100了下午参加端点星,T1一眼,T2写了个nklog,没开O2只有30,T3少看条件认为不可做就溜去......
  • 2022.11.19
    ###noip模拟又炸了。。。。。。##出错点t1:又假了,问题是自己知道假了还没想着写暴力##过程分析半小时通读完先开得t2,因为有个点没转化过来,打了个多一个二分log的......
  • 散乱的思绪-2022.11.19
    我是一个什么都想要,梦想着一步登天的妄想者。我没有一颗聪明绝顶的脑袋,也没有出众样貌,更没有父母的日复一日劳作的毅力。有时候我在想,我是一个什么样的人呢?在我看来我大概......
  • 闲话 22.11.19
    闲话感谢apj先生让我登上了博客园最近闲话阅读量怎么忽高忽低的?一天高一天低了可以说是随便摘了一篇高的11.9怎么是字符串专题啊?这么喜欢看题解为什么不去洛谷给......
  • 【11.12-11.18】博客精彩回顾
    一、优秀文章推荐1.​​云原生安全:Trivy+Harbor实现镜像漏洞的简单、高效扫描​​2.​​配置haproxy负载均衡群集​​3.​​【建议收藏】15755字,讲透MySQL性能优化​​4......
  • 11.19.1
    #include<stdio.h>intmain(){ intn,i,j; unsignedlonglongsum=0,ret=1;  scanf("%d",&n); for(i=1;i<=n;i++) {for(j=1;j<=i;j++) {ret*=j; } sum+=ret;ret......
  • flower in 11.19,或者如果您认为的话,一则小的通告
    发布一则公告。三天之内(到11月22日16:00)尽量避免和我的任何线下交流。若非讨论问题一类,大多数交流将被选择性无视。您可能会被瞪一眼,请见谅。到期本条博客将被撤回。当然如......
  • 【流水】2022.11.19
    随便掺点东西罢大家没事也可以打打基本上不熟练的半个小时也就行了ps:看不到的多刷新几遍实在不行粘源码KaTeX入门fixed by 离散小波变换先假设你有一个简单的公式......
  • 11.19考试题解
    记录一下爆炸的模拟赛。T1原题,这道题的题解之前写过,在这。T2由于边数接近点数,整个图的形态接近树,想到建出原图的一个生成树(任意一个),这样两个点的距离分为两类:只经过......
  • 2022.11.19
    2022.11.19搞了搞我的博客园,(之前写是了些什么东西),搞了搞我的电脑。不知道为什么博客园上的背景时有时无的,可惜了我那么好看的图。哦!问题被wxf解决了。想AL了。不......