TCP/IP之传输层

传输层的作用

按照OSI参考模型的划分,传输层负责管理两个节点之间的数据传输。更具体的,网络层能够根据IP地址,将数据发送到指定的目标主机,而传输层则需要将数据发送到更为具体的某一个具体的应用程序。
传输层中有两个非常具有代表性的传输层协议,他们分别是TCP和UDP。TCP是面向连接的,负责可靠的通信传输,而UDP则是不具有可靠性的,常被用于广播和细节控制交给应用的通信传输。

端口号

数据链路和IP中的地址,分别指的是MAC地址和IP地址,前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层中,也有类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序,因此,它也被称为程序地址。

  • 端口号的作用
    一台计算机上同时运行多个程序,例如浏览器,email客户端,ssh客户端等程序都可以同时运行,传输层正是利用这些端口号识别本机中正在进行通信的应用程序,并准确的将数据传输。
根据端口号识别应用
  • 如何进行通信识别
    TCP/IP中,要识别一个通信,通常要5个要素:源地址IP,目标地址IP,协议号,源端口号,目标端口号,只有这5个信息完全一致,才能识别他们是否为同一个通信。
识别通信
  • 端口号如何确定
    在实际进行通信时,要事先确定端口号。确定端口号的方法主要有两种:
  • 标准既定的端口号:一般0-1023的为知名端口号。
  • 时序分配法:服务端有必要监听端口号,接受服务的客户端没有必要确定端口号,这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。
  • 端口号与协议
    端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。

UDP

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。因此,UDP不提供拥塞控制,丢包重发,顺序控制等功能,但能够简单高效的发送数据,通常用于以下几方面:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

TCP

相对于UDP的面向无连接快速简单高效,TCP则是一种面向连接的,具备顺序控制、重发控制、拥塞管理等机制的可靠的通信传输协议。
TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

  • 通过序列号与确认应答提高可靠性
    在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。另外,为了避免接收重复的数据,TCP中会给每个数据添加序列号,接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送出去。通过序列号和确认应答,TCP可以实现可靠传输。
序列号与确认应答
  • 重发超时确定
    重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过这个时间仍未收到确认应答,发送端将进行数据重发。那么,这个重发超时的具体时间长度是如何确定的呢?
    TCP中,在每次发包时都会计算往返时间及其偏差。将这个往返时间(报文段的往返时间)和偏差时间相加,重发超时的时间就是比这个总和稍大一点的值。
重发超时的确认
  • 连接管理(三次握手和四次握手)
    TCP提供面向连接的通信传输,连接是指各种设备、线路,或网络中进行通信的两个应用程序为了相互传递信息而专有的、虚拟的通信线路,也叫虚拟电路。一旦建立了连接,进行通信的应用程序只使用这个虚拟的通信线路发送和接收数据,就可以保障信息的传输。建立一个TCP连接需要发送三个包,也称为三次握手,断开一个了解需要发送四个包,也称为四次握手。
TCP的连接与断开
  • TCP以段为单位发送数据
    在建立TCP连接的同时,也可以确定发送数据包的单位,我们称之为“最大消息长度(MSS)”。TCP在传送大量数据时,是以MSS的大小将数据进行分割传送。进行重发也是以MSS为单位。
    MSS是在三次握手的时候,在两端主机之间被计算得出的。两端主机在发出建立连接的请求时,会在TCP首部中写入MSS选项。告诉对方自己的接口能够适应的MSS的大小,然后会在两者之间选择一个较小的值投入使用。
TCP以段为单位发送数据
  • 利用窗口控制提高速度
    TCP以段为单位,每发一个段,进行一次确认应答的处理,不过,这种方式下,包的往返时间越长通信性能越低。为了解决这个问题,TCP引入了窗口这个概念。即使在往返时间较长的情况下,它也能够控制网络性能的下降。如下图所示,确认应答不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅的缩短。也就是说,发送端主机,在发送了一个段以后,不必要一直等待确认应答,而是继续发送。
    窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。
TCP窗口
  • 窗口控制与重发机制
    在使用窗口控制中,如果出线段丢失该怎么办?考虑两种情况:
  • 数据已经到达对端,但是,确认应答未能返回,这种情况下,是不需要进行重发的,在未使用窗口控制的情况下,没有收到确认应答的数据也是会被重发,而使用了窗口控制以后,某些确认应答即便丢失也无需重发。
IMG_5674.PNG
  • 某个报文段丢失了,如下图所示,当1001~2000的报文段丢失以后,发送端会一直收到序号为1001的确认应答,而发送端主机如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发。这种机制比之前的超时管理更加高效,因此被称为高速重发机制。
Paste_Image.png
  • 流控制
    TCP提供了一种机制,可以让发送端根据接收端的实际接收能力控制发送的数据量,这就是流控制。他的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,发送端发送不超过这个限度的数据,该大小限度就是窗口大小。TCP首部中,专门有一个字段用来通知窗口大小。
流控制
  • 拥塞控制
    有了TCP的窗口控制,收发主机之间能够连续的发送大量数据包,然而,如果在通信刚开始是就发送大量数据,也可能会引发其他问题。
    计算机网络处于一个共享环境,因此,可能会因为其他主机之间的通信使得网络拥堵。在网络拥堵时,如果突然发送大量的数据,极有可能会导致整个网络的瘫痪。TCP为了防止该问题的出现,在通信一开始就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制。
    为了在发送端调节所要发送数据的量,定义了一个叫做“拥塞窗口”的概念。再慢启动的时候,将这个拥塞窗口的大小设置为1个数据段(1MSS)发送数据,之后每一次收到一次确认应答(ACK),拥塞窗口的值就加1.在发送数据包时,将拥塞窗口的大小和接收端主机通知的窗口大小做比较,然后按照他们当汇总较小的那个值,发送比其还要小的数据量。
拥塞控制

TCP和UDP首部的格式

  • UDP首部的格式
UDP首部格式

如图所示:UDP首部由源端口号,目标端口,包长和校验组成。

  • TCP首部的格式
TCP首部格式

TCP首部主要包括源端口号,目标端口号,序列号,确认应答号,数据偏移,控制位,窗口大小,校验和等字段组成,但没有表示包长度和数据长度的字段。可由IP层获知TCP的包长,由TCP的包长可知数据的长度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍。 一、 计算机网络体系结构分层 二、 TCP/IP 基础...
    涤生_Woo阅读 64,461评论 38 1,038
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 4,397评论 1 46
  • 协议基础 协议就是计算机之间通过网络实现通信时实现所达成的一种“约定”,这种约定使得那些由不同厂商的设备,不同的C...
    d9fc24a0c9a9阅读 2,291评论 0 6
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,019评论 0 8
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 12,979评论 6 174