网络协议之-TCP

首先对计算机网络有一定基础的同学一定知道OSI的网络七层架构,这是一个理想化的网络架构模型。它既复杂也不实用,从上至下分别是:应用层,表示层,会话层,运输层,网络层,数据链路层和物理层,而现实真正得到广泛应用的其实是基于 TCP/IP的四层网络结构:应用层,运输层,网际层(用网际层这个名字是为了强调这一层是解决不同网络的互联问题),网络接口层。从实质上讲TCP/IP只有最上面的三层,因为最下面的网络层接口基本上和一般的通信链路没有什么区别,对于计算机网络来说没有特别的新的东西,在我们学习计算机网络时通常结合OSI七层模型和TCP/IP四层模型进行综合学习,结合两者的优点,采用一种五层模型进行学习,既:应用层,运输层,网络层,数据链路层,物理层,今天这篇文章将要学习和分析的是位于运输层的TCP协议。

运输层:运输层的主要任务就是负责两个 主机进程 间的通信提供通用的数据传输服务,运输层向它的上层应用层提供服务,应用进程 利用该服务传送应用层报文。 (注意:通信的不是主机,而是主机中的进程)

TCP: 传输控制协议(Transmission Cotrol Protol),是一个面向连接的,可靠的端到端的传输协议,其数据传输单位是:报文段

TCP的主要特点:
1 .面向连接的运输层协议
2 . 每一条tcp连接只能有两个端点,每条tcp连接只能是点对点的
3 .TCP提供 可靠交付 服务,通过TCP传输的数据无差错,无丢失,无重复,并且按序到达
4 .TCP提供全双工通信,允许通信双方的进程在任何时候都能发送数据,TC连接的两端都设有发送缓冲和接收缓冲,用来临时存放数据(发送时,将数据发送到缓冲,应用就可做自己的事,TCP在合适的时候把数据发出,同理接收时,数据先放入缓存,上层的应用进程合适时读取缓存)
5 .面向字节流,TCP中流入到进程和进程流出的都是字节序列,TCP把应用程序传递下来的数据看成是一连串无结构的字节流,并不知道字节流的含义,TCP不保证数据发送方发送到数据块数量和接收方接收接收的数据块数量一致,因为发送方可能发送10个数据块,但接收方用4个数据块来接受全部信息,但是数接收方接收到的字节流必须和发送方发送的字节流完全一样, TCP不关心应用程序一次写入多少数据到缓存,而是根据对方给出的窗口值和当前网络拥塞程度,来决定一个报文段应包含多少字节

什么是面向连接?
是指在传输数据前必须先建立连接(逻辑连接:并非水平方向上的直接连接),数据传输结束后再释放连接

什么是连接?
连接 是TCP中最基本的抽象,我们上文有提到说,TCP的 每条连接 都是点对点的,一条连接对着两个端点,那这个端点是什么?其实也就是我们常说的 套接字(Socket)套接字是什么?根据RFC793的定义: 套接字(socket)=(IP地址+端口号) ,所以说两个通信的套接字可以确定一条连接,而 连接 其实就是通信的两个端点(套接字)之间的一个逻辑抽象。

TCP协议是基于网络层的IP协议的,IP协议是不可靠的,为什么说TCP是可靠的?
因为在不可靠的网络层之上,TCP是实现了停止等待协议和ARQ等协议,来保证数据报文传输的可靠性

可靠传输原理
我们知道,TCP发送的报文段,会交给IP层进行传递,而IP层只能提供最大努力通知服务,也就是说TCP下面的网络层传输是不可靠的的,所以TCP需要采取比必要的措施来保证运输层中的通信可靠。

停止等待协议

全双工通信,双发既可以是发送方也可以是接收方,为理解方便,我们定义A发送数据给B, A为发送方B为接收方,我们把传送的数据单元成为分组(不考虑具体是在哪层传输的,不同层的叫法不同)停止等待就是每发送完一个分组,就等待对方的的确认,收到确认后再发送下一个分组。 正常情况: A发送一个分组,B确认一个分组,以此下去直到发送完毕。 但是一直无差错是不可能的,数据包传输的过程中可能丢失,也可能B收到后检测错误直接丢弃,对于B来说,没收到分组,或者分组检测有误丢弃,是不会给A报告信息的。所以可靠的传输协议就是如下设计的,A如果一段时间内没有接收到B的确认,就认为刚才的分组丢失了,所以就重传前面发过的分组,这就是 超时重传,要实现超时重传,就必须设置一个超时计时器,如果规定时间内收到确认,就撤销该计时器,否则就重传。
重传细节
1.A发送完分组后,必须暂时保留一个分组的副本或者备份,防止重传,只有收到确认后才清除。
2 .分组和确认分组都必须编号,这样才能明确哪一个发出的分组得到了确认。
3 .超时计时器设置的重传时间应当比分组传输平均往返时间长一些
确认丢失和确认迟到
B发送的确认分组丢失了,那么A在超时重传的时间内没有收到确认就会重新发送,但是A无法确认是自己发出的分组丢失出错,还是B发送的确认丢失了,如果是B的确认丢失了,此时A重传的分组已经收到,那么B需要进行一下两个处理:
1 . 丢弃接收到的A重传的分组
2 .向A发送确认,防止A继续重传。
B对分组的确认延迟,这样就会导致A收到重复的确认,对重读的去人处理比较简单,收下后丢弃,B任然回收到重复的分组,同样丢弃分组,重传确认分组即可。
使用上述的确认和重传机制,就可以实现在不可靠的网络上实现可靠的通信,上述的这种可靠的传输协议被成武自动重传请求ARQ(Automatic Repeat reQuest)

停止等待协议简单,但是缺点也明显,信道利用率太低,所以为了提高发送速率,发送方可以不使用抵消的停止等待协议,而是采用 流水线传输
流水线传输:发送方可以连续发送多个分组,不必发完一个分组就停下来等待确认,这样可以使得信道上一直有数据不间断的传送。这种方式可以获得很高的信道利用率。使用流水线传输时需要使用 连续ARQ协议滑动窗口协议

待续。。。。。

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

推荐阅读更多精彩内容

  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,470评论 0 6
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 目录 TCP协议的基本概念面向链接的服务可靠的服务序列号字节流传输 TCP协议数据段的格式TCP伪头部 TCP协议...
    kirito_song阅读 2,950评论 2 33
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,387评论 0 2
  • 当 app 和服务器进行通信的时候,大多数情况下,都是采用 HTTP 协议。HTTP 最初是为 web 浏览器而定...
    Flysss1219阅读 1,252评论 0 4