传输层协议- TCP/UDP

image.png

在七层的网络分层中,位于传输层的传输协议通常期望能够提供以下支持

  1. 保证讯息的传递
  2. 讯息传递顺序与发送顺序相同
  3. 一个讯息最多只会传输一份
  4. 支持任意大小的讯息
  5. 支持发送者与接受者的同步
  6. 允许接受者对发送者执行流量通知
  7. 支持一台主机上执行多个不同的应用程序

然而位于传输层下层的网络层具有以下限制

  1. 丢弃讯息
  2. 重新排序讯息
  3. 传递多份相同的讯息
  4. 传递的讯息有大小限制
  5. 讯息的传递可能有任意长短的时间延迟

总而言之,网络层提供的是不可靠的服务。传输层通讯协议的挑战在于将下层不可靠的网络层服务变成应用程序所需要的服务。

  1. 不可靠服务 -> 不可靠服务 (UDP)
  2. 不可靠服务 -> 可靠服务 (TCP)

UDP 协议

UDP 是一个不可靠的传输协议,它将下层的主机到主机的传输服务拓展成程序对程序的通讯服务,如下图所示。


image.png

UDP 通过增加一层反多工(demultiplexing),让同一个主机上的多个应用程序可以共享网络。UDP协议格式的首部有一个 DstPort 字段,不同的应用程序使用不同的 DstPort。


image.png

接收端主机在收到 UDP 封包之后,利用反多工获取 Port, 利用 Port 识别出该 UDP 封包属于哪个应用程序。


image.png

TCP 协议

和 UDP 相比,传输控制协议 TCP (Transmission Control Protocol) 提供以下服务

  1. 可靠的服务
  2. 面向连接
  3. 基于字节流的服务

同时 TCP 也有以下功能

  1. 流量控制 (Flow control)用来预防发送者发送过多的流量使接收者超出可负荷的容量
  2. 拥塞控制 (Congestion control)用来预防网络被注入过多的数据而导致路由器,交换机或者通信链路超出负荷

TCP 的资料段(Segments)

TCP 是一个基于字节流的通信协议,传送端将若干字节写入一个 TCP 连线,接收端从该 TCP 连线中读取字节。在 TCP 连线上传送的封包称为资料段(Segments)。
如下图所示,TCP 传送端将应用程序传送的字节先储存起来,等字节容量达到合理大小的资料段,再将这个资料段发送至 TCP 目的端主机。TCP 目的端会将资料段内容放入接收缓冲区,接收端应用程序再由此缓冲区读取字节


image.png

TCP 的连线管理

TCP 传送端与接收端在交换 Segments 之前需要先建立连线。Client 是连线启动者,在代码中通常是这样体现的。

Socket clientSocket = new Socket("hostname","port number");

Server 一直在等待 Client 连接,在代码中是这样体现的。

Socket connectionSocket = welcomeSocket.accept();

TCP 连线的建立采用三次握手(Three-way handshake)

image.png

  1. Client 发送 TCP SYN 资料段给 Server,注明 Client 一开始的序号
  2. Server 收到 SYN,回传 SYN/ACK 资料段,Server 配置缓冲区并注明 server 一开始的序号
  3. Client 收到 SYN/ACK,回传可能带有资料的 ACK 资料段
  4. SYN 标志位用于 TCP 建立连接
  5. Server 发送的 Acknowledgement = x + 1 表示 Client 发送的序号 x+1 之前的所有 segment, Server 都收到了,接下来 Client 可以发送序号为 x+1 的 segment 了。
  6. Client 发送的 Acknowledgement = y + 1 表示 Server 发送的序号 y+1 之前的所有 segment, Client 都收到了,接下来 Server 可以发送序号为 y+1 的 segment 了

SYN、FIN、RESET、PUSH、URG 和 ACK 是 TCP 协议首部的 6 bit 的标志位,用来传递 TCP 连线两端的控制讯息。SYN/FIN 标志位分别用于建立与终止 TCP 连接。

TCP 连线的关闭需要 4 次握手
Client 关闭 socket

clientSocket.close();
image.png
  1. Client 发送 FIN 给 Server
  2. Server 收到 FIN,回传 ACK。关闭连线,发送 FIN
  3. Client 接收 FIN, 回传 ACK,进入 “Timed wait” 状态
  4. Server 接收 ACK ,连线关闭

TCP Client 状态图

image.png

如上图所示,从 TCP Client 的角度来看连线的建立和关闭。

  1. TCP Client 最开始处于 CLOSED 状态
  2. TCP Client 准备初始化一个 TCP Connection
  3. TCP Client 发送 一个 SYN,进入 SYN_SENT 状态
  4. 收到 Server 的 SYN/ACK,发送 ACK,进入 ESTABISHED 状态,TCP 连接建立完成
  5. TCP Client 处于 ESTABISHED 状态,准备关闭连线
  6. TCP Client 发送一个 FIN,进入 FIN_WAIT_1 状态
  7. TCP Client 收到 Server 的 ACK, 进入 FIN_WAIT_2 状态
  8. TCP Client 收到 Server 的 FIN ,回送 ACK,进入 TIME_WAIT 专题,等待 30s,TCP Client 进入 CLOSED 状态

TCP Server 状态图
有 TCP Client 状态图,自然也有 TCP Server 状态图

image.png

  1. TCP Server 最开始处于 CLOSED 状态
  2. TCP Server 创建了一个 Socket 并监听 Socket,进入 LISTEN 状态
  3. TCP Server 收到来自 Client 的 SYN,回传 SYN/ACK,进入 SYN_RCVD 状态
  4. TCP Server 收到来自 Client 的 ACK,进入 ESTABLISHED 状态, Server 与 Client 的连线建立成功
  5. TCP Server 处于 ESTABISHED 状态,收到来自 Client 的 FIN,回传 ACK,进入 CLOSE_WAIT 状态
  6. TCP Server 发送 FIN,进入 LAST_ACK 状态
  7. TCP Server 处于 LAST_ACK 状态,收到来自 Client 的 ACK,进入 CLOSED 状态

总结

  1. 传输层的协议是讲主机之间的封包传递服务转换成应用程序之间的通讯管道
  2. UDP 提供不可靠的传输服务
  3. TCP 提供可靠的传输服务

参考

作为网络方面的简单入门内容,文章主要是介绍网络层协议的简单知识。这篇博客内容总结于黄能富教授的《CS01060 2017-秋季-計算機網路概論》课程,博客截图来源于课程 PPT。

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

推荐阅读更多精彩内容