本文是复习原来的课本《计算机网络(第6版)》而总结出来的梳理思惟的小笔记,由于内容也比较多,一次是整理不完了,因此又是慢慢补坑。如有错误欢迎提出(ง •_•)ง。缓存
咱们知道网络层的IP协议能够经过IP地址来帮助咱们定位到某一台电脑,可是真的在进行通讯的是电脑上的进程,因此咱们须要一个东西来区分不一样电脑的不一样进程,这也是为何会出现一个传输层。
可是这里就会出现一些问题:服务器
解决的方法:使用协议端口号(简称端口)
虽然通讯的终点是应用进程,但咱们只要把传送的东西交给端口,剩下的工做就由传输层的协议来完成。网络
分别是无链接的UDP和面向链接的TCP。并发
发送数据以前UDP不须要像TCP同样创建链接,因此减小了开销和时延。spa
UDP是不保证可靠交付的,也就是传输很快,可是不保证质量。操作系统
因此即便出现网络拥塞,主机的发送速率也不会下降。对于视频在线直播,网络电话之类的应用来讲是颇有效的,它们须要实时的传输速率,又能够适当的有数据的损失。计算机网络
这句话的意思是UDP支持下面四种通讯:code
UDP首部只有8个字节,而TCP首部有20个字节。
UDP首部的结构:视频
这里每一个都是占了2个字节。blog
UDP的伪首部:
在UDP的8个字节首部的基础上,其实还有一个12字节的伪首部。
之因此是伪首部,是由于它址在UDP计算检验和的时候临时添加在数据报前的:
应用程序在使用TCP协议前,必需要经过三次握手进行创建,要通过四次挥手来结束链接。
来插一个本身画的有机物小剧场,帮助记忆:
Q:为何是三次握手,不是两次握手?
A: 在某种状况下,假如只有两次握手,第一个分组在路上延迟发送了,等到传输结束后,服务器又收到了SYN请求,此时创建链接的话就迟迟得不到客户端的回应。
TCP链接的端口叫作套接字(插口),注意不少地方都有这个套接字的概念,可是在这里它的定义是:
端口号+IP地址
每一条TCP链接惟一地被通讯两端的两个端点所肯定。
现实状况下:
因此咱们必需要想办法来应付这两种状况,才能实现可靠的服务:
咱们假设只有年糕君在发送数据,有机物在接收数据,并发送确认(可是现实是双方均可以做为发送方和接收方)。
情景一:发送分组丢失
若是一开始年糕君发送的数据块M丢失了,有机物迟迟没有回应,年糕君会经过等待回应的时间来判断块M是否是丢失了,而后就选择重发,这就是超时重传。
注意点:
情景二:确认丢失
若是有机物给年糕君的对数据块M的确认丢失了。年糕君在设定时间内没有收到确认,就会又发送一个M的副本,有机物收到后此时应该:
这样咱们就能够实如今不可靠的传输网络上实现可靠通讯,这种协议一般称为:自动重传请求ARQ。
中止等待协议的缺陷
信道利用率过低。
由于年糕君必需要等到收到有机物的确认才能发送下一个,这其中包括了不少时间,除了包括分组和确认的发送时间,还要加上往返时间(RTT)。但这个过程的核心只是分组发送的时间。
解决方法
采用流水线传输,也就是年糕君能够一次性发送多个分组,没必要收到确认才发送下一个。
所谓全双工通讯的定义是:
通讯的双方能够同时发送和接收信息的信息交互方式
TCP容许通讯双方在任什么时候候都能发送数据。
So,为何?
由于发送方和接收方都拥有发送缓存和接受缓存,存放双向通讯的数据。
因此,应用程序把数据块放进缓存里后,就能够去作本身的事情了。好比在发送的时候,只用丢给缓存,就能够拜拜啦,在接收的时候,有须要再从缓存里去拿行了。
Q:什么是“流”?
A: 流入到进程或从进程流出的字节序列。
虽然程序和TCP的交互是一个个数据块(大小不等),但TCP认为这些都只是一串无结构的字节流。【虽然个人漫画画的是一个个小块(包裹),但这个小块是能够被拆开,而后把里面的东西(字节)取出来一些或者填进去一些( •̀ ω •́ )】它不保证发送方的数据块和接收方的数据块是同样的大小,好比你给了它10个块,可是它只用了4个块就把你传来的东西送给它的上级了。TCP是根据当前的窗口值和拥塞状况来决定一个报文段包含多少字节的。若是TCP缓存数据块太长,就划分短一点再发,若是进行一次只发来一个,就等到足够字数再发送出去。