看课本学习:传输层

前言

本文是复习原来的课本《计算机网络(第6版)》而总结出来的梳理思惟的小笔记,由于内容也比较多,一次是整理不完了,因此又是慢慢补坑。如有错误欢迎提出(ง •_•)ง。缓存

为何会出现传输层

咱们知道网络层的IP协议能够经过IP地址来帮助咱们定位到某一台电脑,可是真的在进行通讯的是电脑上的进程,因此咱们须要一个东西来区分不一样电脑的不一样进程,这也是为何会出现一个传输层。
可是这里就会出现一些问题:服务器

  1. 不一样的操做系统的进程标识符格式不一样。
  2. 进程的建立和撤销是动态的。
  3. 咱们须要的终点入口是功能,而不是实现这个功能的进行是哪个。

解决的方法:使用协议端口号(简称端口)
虽然通讯的终点是应用进程,但咱们只要把传送的东西交给端口,剩下的工做就由传输层的协议来完成。网络

关于端口

端口の分类

  1. 服务器端使用的端口号
    熟知端口号(0~1023):分派给TCP/IP重要应用程序,如DNS是53,SMTP是25。
    登记端口号(1024~49151):为没有熟知端口号的应用程序使用的。
  2. 客户端使用的端口号(49152~65535)。又叫短暂端口号,客户进程运行时才进行动态选择。通讯结束后,端口号就会不复存在,后面又会分配给新的客户进程使用。

传输层的两种协议

分别是无链接的UDP和面向链接的TCP。并发

UDP

UDP是无链接的

发送数据以前UDP不须要像TCP同样创建链接,因此减小了开销和时延。spa

UDP尽最大努力交付

UDP是不保证可靠交付的,也就是传输很快,可是不保证质量。操作系统

UDP面向报文

  • UDP对于应用层给它的报文:不合并和不拆分,只是保留边界。因此应用层给它多少,他就一次性发多少。
  • UDP对于网络层给它的报文:去除首部以后,就原封不动的都给应用层。

UDP没有拥塞控制

因此即便出现网络拥塞,主机的发送速率也不会下降。对于视频在线直播,网络电话之类的应用来讲是颇有效的,它们须要实时的传输速率,又能够适当的有数据的损失。计算机网络

UDP支持x对y的交互通讯

这句话的意思是UDP支持下面四种通讯:code

  • 一对一
  • 一对多
  • 多对一
  • 多对多

UDP首部开销小

UDP首部只有8个字节,而TCP首部有20个字节。
UDP首部的结构视频

  1. 源端口
  2. 目的端口
  3. 长度
  4. 检验和

这里每一个都是占了2个字节。blog

UDP的伪首部
在UDP的8个字节首部的基础上,其实还有一个12字节的伪首部。
之因此是伪首部,是由于它址在UDP计算检验和的时候临时添加在数据报前的:

  • 这个伪首部不会给应用层也不会给网络层。
  • 检验方法是把首部和数据部分一块儿检验。
  • 若是检查错误,就丢弃/带着警告交给应用层。

TCP

TCP是面向链接的

应用程序在使用TCP协议前,必需要经过三次握手进行创建,要通过四次挥手来结束链接。
来插一个本身画的有机物小剧场,帮助记忆:
图片描述

Q:为何是三次握手,不是两次握手?
A: 在某种状况下,假如只有两次握手,第一个分组在路上延迟发送了,等到传输结束后,服务器又收到了SYN请求,此时创建链接的话就迟迟得不到客户端的回应。
图片描述

每条链接只能有两个端口

TCP链接的端口叫作套接字(插口),注意不少地方都有这个套接字的概念,可是在这里它的定义是:

端口号+IP地址

每一条TCP链接惟一地被通讯两端的两个端点所肯定。

TCP提供可靠交付的服务

现实状况下:

  1. 传输信道可能会有差错。
  2. 接收方可能不能及时处理收到的数据。

因此咱们必需要想办法来应付这两种状况,才能实现可靠的服务:

中止等待协议

咱们假设只有年糕君在发送数据,有机物在接收数据,并发送确认(可是现实是双方均可以做为发送方和接收方)。

  • 正常状况下,年糕君发送数据后,有机物收到后再回复一个确认的消息,年糕君收到这个确认的消息才会继续发送下一个。

情景一:发送分组丢失
若是一开始年糕君发送的数据块M丢失了,有机物迟迟没有回应,年糕君会经过等待回应的时间来判断块M是否是丢失了,而后就选择重发,这就是超时重传

  • 因此必须给予年糕君一个超时计时器,若是年糕君收到有机物确认的时间比定时要早,那就撤销目前的计时,继续发送下一个数据块。

注意点:

  1. 年糕君在发送一个分组后,必需要保留发送分组的副本
  2. 分组和确认分组必须进行编号,这样才能明确哪一个收到了哪一个没收到。
  3. 计时器设置的重传时间应该比数据在分组传输的平均往返时间更长

情景二:确认丢失
若是有机物给年糕君的对数据块M的确认丢失了。年糕君在设定时间内没有收到确认,就会又发送一个M的副本,有机物收到后此时应该:

  • 丢弃这个重复的分组
  • 向年糕君发送确认,以避免年糕君又继续重发M副本。

这样咱们就能够实如今不可靠的传输网络上实现可靠通讯,这种协议一般称为:自动重传请求ARQ

中止等待协议的缺陷
信道利用率过低。
由于年糕君必需要等到收到有机物的确认才能发送下一个,这其中包括了不少时间,除了包括分组和确认的发送时间,还要加上往返时间(RTT)。但这个过程的核心只是分组发送的时间

解决方法
采用流水线传输,也就是年糕君能够一次性发送多个分组,没必要收到确认才发送下一个。

TCP提供全双工通讯

所谓全双工通讯的定义是:

通讯的双方能够同时发送和接收信息的信息交互方式

TCP容许通讯双方在任什么时候候都能发送数据
So,为何?
由于发送方和接收方都拥有发送缓存和接受缓存,存放双向通讯的数据。
因此,应用程序把数据块放进缓存里后,就能够去作本身的事情了。好比在发送的时候,只用丢给缓存,就能够拜拜啦,在接收的时候,有须要再从缓存里去拿行了。
图片描述

传输是面向字节流的

Q:什么是“流”?
A: 流入到进程或从进程流出的字节序列。

虽然程序和TCP的交互是一个个数据块(大小不等),但TCP认为这些都只是一串无结构的字节流。【虽然个人漫画画的是一个个小块(包裹),但这个小块是能够被拆开,而后把里面的东西(字节)取出来一些或者填进去一些( •̀ ω •́ )】它不保证发送方的数据块和接收方的数据块是同样的大小,好比你给了它10个块,可是它只用了4个块就把你传来的东西送给它的上级了。TCP是根据当前的窗口值和拥塞状况来决定一个报文段包含多少字节的。若是TCP缓存数据块太长,就划分短一点再发,若是进行一次只发来一个,就等到足够字数再发送出去。

相关文章
相关标签/搜索