网络_基础知识

局域网LAN:计算机之间通过交换机和路由器连接在一起

广域网WAN:将远隔千里的计算机连在一起

计算机之间的传输媒介是光信号和电信号

网络_基础知识

 

TCP/IP五层模型

网络_基础知识

 

数据包的封装和分用

1.不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫数据报,在链路层叫做帧

2.应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部,称为封装

3.首部信息中一般包含了首部的长度,载荷有多长,上层协议的信息

4,数据封装成帧后发送到传输介质上,到达目的主机后每层协议剥掉对应的首部。  

 

**网络基础2**

 

应用层

协议是一种约定

序列化:发送数据时将一个结构体按规则转化成字符串

反序列化:接收数据时按相同的规则把字符串转化成结构体

 

HTTP协议(超文本传输协议)

认识URL

平时看到的网址就是俗称的URL

网络_基础知识

转义规则:在url中转义字符不能随意出现,需要特殊字符,就要进行转义,转义的规则:将需要转码的字符转成16进制,然后从右向左,取4位,每2位做以为,前面加上%,编码成%XY格式,比如“+”被转成了“%2B”

 

传输层

负责数据能够从发送端传输接收端

端口号范围划分:0-1023知名端口号。 1024-65535:操作系统动态分配的端口号

认识知名端口号

ssh服务器--22端口号              ftp服务器--21端口号

telnet服务器--23端口号          http服务器--80端口号

https服务器---443端口号

 

一个进程可以绑定多个端口号(一个进程可以打开多个文件描述符,而每一个文件描述符都对应着一个端口号,所以一个进程可以bind多个端口号)

一个端口号不能被多个进程绑定(可以通过先绑定一个端口号,再fork出子进程便可以绑定同一个端口号)

 

UDP协议

网络_基础知识

不能单次传输数据量很长的场景

特点:无连接,不可靠,面向数据报(不够灵活的控制读写数据次数和质量)

无连接:知道对方的ip和端口号,就直接进行传输,不需要建立连接

不可靠:没有确认重传机制,如果因为网络故障无法发送到对方,UDP不会给应用层返回任何错误信息

面向数据报:应用层交给UDP的报文,UDP原样发送,既不会拆分也不会合并

 

UDP的缓冲区

没有真正意义上的发送缓冲区,调用sendto直接交给内核,由内核完成后续操作

具有接收缓冲区,但是这个缓冲区不能保证收到UDP的顺序和发送的一致,如果缓冲区满了,自动丢弃

一个UDP能传输的最大长度是64K,包含首部,如果数据超过64K就要手动分包多次发送

socket既能读也能写叫做全双工

 

网络_基础知识

 

TCP协议

TCP称为“传输控制协议”

 

TCP协议段的格式

网络_基础知识

 

4位首部长度:表示该TCP头部有多少个32bit(有多少个4字节);所以TCP头部最大长度是15*4=60

 

6位标志位: URG--紧急指针是否有效

                    ACK--确认报文段,3次握手,尝试应答

                    PSH--提示接收端立刻从TCP缓冲区把数据带走

                    RST--重新建立连接,复位报文段

                    SYN--若为1,TCP数据报为同步报文段,尝试与对方建立连接

                    FIN--结束报文段,尝试断开连接

网络_基础知识

为什么TIME_WAIT的时间是2MSL?

MSL是TCP报文的最大生存时间,因此TIME_WAIT持续存在2MSL的话就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器就会立刻重启,可能会收到来自上一个进程的迟到的数据,但是这种数据可能是错误的)同时也是在理论上保证最后一个报文可靠到达(假设最后一个ACK丢失,那么服务器会再重发一个FIN,这时虽然客户端的进程不在了,但是TCP连接还在,仍然可以重发LAST_ACK)

 

几种ACK机制

1.确认应答机制

TCP将每个字节的数据都进行了编号,即为***

每一个ACK都带有对应的确认***,意思是告诉发送者,我已经接收到了哪些数据,下一步你从哪里开始发

网络_基础知识

2.超时重传机制

主机A在特定的时间间隔之内没有收到B发送来的确认应答,就会重发

  网络_基础知识网络_基础知识

如图二所示,主机B会收到很多重复的数据,TCP协议需要能够识别出哪些是重复的包,并且把重复的包丢弃掉,这时候利用***,就能达到去重的效果

超时的时间如何确定:TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间

Linux中超时以500ms为一个单位进行控制,每次判定超时重传的超时时间都是500ms的整数倍,如果重发一次之后,仍然得不到应答,等待2*500ms后在进行重传。如果仍然得不到应答,等待4*500ms进行重传。依次类推,以指数形式递增,累计到一定的重传次数,TCP认为对方异常,会强制断开连接

 

滑动窗口

一收一发的性能较低

网络_基础知识

窗口大小就是无需等待确认应答而可以继续发送数据的最大值,此图滑动窗口的大小为4000字节

发送前四个数据时,无需等待ACK,直接发送

收到第一个ACK后,滑动窗口向后移动,继续发送第五个数据段的数据内容,依次类推

操作系统为了维护这个滑动窗口,需要开辟一段空间做发送缓冲区记录还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉

窗口越大,网络的吞吐率越高

网络_基础知识

 

有两种丢包情况

1.数据包抵达,ACK丢失

    部分ACK丢掉并不影响,因为可以通过后续的ACK进行确认

2.数据包丢失

网络_基础知识

这种机制被称为高速重发机制,

 

流量控制

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端接收缓冲区已满,如果发送端继续发送,就会造成丢包,继而引起丢包重传等一系列问题。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制。

网络_基础知识

拥塞控制

如果在开始阶段就发送了大量的数据,仍然可能引发问题

慢开始机制--拥塞避免算法

网络_基础知识

慢开始指的是初始时慢,但是增长速度快

网络_基础知识

延迟应答

网络_基础知识

捎带应答

网络_基础知识

 

面向字节流

网络_基础知识

由于缓冲区的存在,TCP读写不需要一一匹配

 

粘包问题

这里的包指的是应用层的数据包,在TCP协议中没有像UDP这样的确认长度的字段,站在传输层角度,TCP是一个报文一个报文进行传输的,按照序号排好放在缓冲区中,站在应用层的角度,看到的是一串连续的字节数据,应用程序看到这么一连串的字节数据,不知道从哪里开始,哪里结束

 

如何避免?

对于定长的包,保证每次按固定大小读取即可

对于变长的包,可以在包头位置,约定一个包总长度的字段,或者在包和包之间使用明确地分隔符

 

TCP的可靠性

网络_基础知识网络_基础知识

网络_基础知识

 

网络层

IP协议

IP分为两个部分,网络号和主机号

划分5类的方法可能会太集中与某类,而其他几类几乎得不到使用的情况

针对这种情况,提出了新的方案--CIDR  子网掩码

 

私有IP和公有IP

私有指的是LAN口,子网IP   公有是WAN口,外网IP

 

数据链路层

以太网

MAC地址:用来识别数据链路层中的节点,长度48位(6个字节),一般用16进制数字加冒号表示(例如:08:00:27:03:fb:19)

MTU:相当于每次发快递包裹的大小,这个限制是不同的数据链路层对应的物理层产生的限制

网络_基础知识

ARP协议:建立主机IP地址和MAC地址的映射关系 

 

网络_基础知识

网络_基础知识

网络_基础知识