1、MAC地址
MAC地址(Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址、以太网地址、物理地址或硬件地址,它是一个用来确认网络设备位置的位址,由网络设备制造商生产时烧录在网卡中。
- 在OSI模型中第三层网络层负责IP地址,第二层数据链路层负责MAC地址
- MAC地址长度48位
2、IP地址
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
MAC地址和IP地址分别的作用
- IP地址是互联网为主机设备分配的逻辑地址,MAC是网络设备的物理地址
- IP地址通过地址解析协议ARP协议转化为MAC地址
3、端口
- 物理端口 例如RJ45
- 虚拟端口 特指TCP/IP协议中的端口
4、TCP/IP四层模型
- 应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
- 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP 协议、远程登录服务应用使用了有TELNET协议。
- 应用层还能加密、解密、格式化数据。
- 应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。
- 传输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。且在运输层中,TCP和UDP 也同样起到了中流砥柱的作用。
- 网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。路由器工作在这一层。
- 网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
数据链路层的作用
在不可靠的物理介质上提供可靠的传输,接收来自物理层的位流形式的数据,并封装成帧,传送到上一层。通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路。提供物理地址寻址功能。交换机工作在这一层。
5、协议
常见协议
应用层
- FTP协议(File Transfer Protocol文件传输协议)
- HTTP协议(Hyper Text Transfer Protocol超文本传输协议)
- NFS (Network File System网络文件系统)
传输层
- TCP协议(Transmission Control Protocol传输控制协议)
- UDP协议(User DatagramProtocol用户数据报协议)。
网络层
- IP协议(Internet Protocol因特网互联协议)
- ICMP协议(Internet Control MessageProtocol因特网控制报文协议)
- IGMP协议(Internet Group Management Protocol因特网组管理协议)
网络接口层
- ARP协议(Address Resolution Protocol地址解析协议)
- RARP协议(ReverseAddress Resolution Protocol反向地址解析协议)。
TCP协议
IP协议
- 生存时间:TTL,表明是数据报在网络中的寿命,即为"跳数限制”,由发出数据报的源点设置这个字段。路由器在转发数据之前就把TTL值减一,当TTL值减为零时,就丢弃这个数据报。
- 协议:指出此数据报携带的数据时使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程,常用的ICMP(1),IGMP(2),TCP(6),UDP(17),IPv6 (41)
TCP 和 UDP 的区别
- (有链接/无连接)TCP协议是有连接的,而UDP是无连接的
开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。 - (可靠性有序性)TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
- (发送损耗)TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
- (流量控制和拥塞控制)TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
- TCP面向的是字节流的服务,UDP面向的是报文的服务。
UDP为什么不可靠
UDP面向数据报无连接的,数据报发出去,就不保留数据备份了。 仅仅在IP数据报头部加入校验和复用。 UDP没有服务器和客户端的概念。 UDP报文过长的话是交给IP切成小段,如果某段报废报文就废了。
应用
- 由于TCP提供可靠交付和有序性的保证,它是最适合需要高可靠并且对传输时间要求不高的应用。
- UDP是更适合的应用程序需要快速,高效的传输的应用,如游戏。
- UDP是无状态的性质,在服务器端需要对大量客户端产生的少量请求进行应答的应用中是非常有用的。
上层协议
- 基于TCP协议的:Telnet,FTP以及SMTP协议。
- 基于UDP协议的:DHCP、DNS、SNMP、TFTP、BOOTP。
封装
上层协议是如何使用下层协议提供的服务的呢?其实这是通过封装(encapsulation)实现的。应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。
7、socket
- socket套接字是对网络中不同主机的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络进程通信的一端。套接字是应用程序通过网络协议进行通信的接口。
- 通信时一个网络应用程序将要传输的内容放入所在主机的socket中,通过网络传输介质将信息传入目标主机的socket中。
- socket是由IP地址和端口结合的提供向应用层进程传输数据包的机制。
8、字节序
字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。
通信双方交流的信息单元(比特、字节、字、双字等等)如果不达成一致的规则,通信双方将无法进行正确的编码/译码从而导致通信失败。
- 大端字节序:“高低低高” 高位存在低地址,低位存在高地址
- 小端字节序:“高高低低” 高位存在高地址,低位存在低地址
9、TCP通信过程
服务端
- 创建套接字
- 绑定IP端口
- 开始监听
- 等待客户端发起连接,接收客户端连接
- 进行通信
- 通信结束后断开连接
客户端
- 创建套接字
- 指定IP端口连接服务器
- 连接成功后进行通信
- 通信结束后断开连接
10、TCP三次握手、四次挥手
- 第一次握手:客户端向服务器发送
SYN
包(seq=x
),请求建立连接,等待确认 - 第二次握手:服务端收到客户端的SYN包,回一个
ACK
包(ack=x+1
)确认收到,同时发送一个SYN
包(seq=y
)给客户端 - 第三次握手:客户端收到
SYN+ACK
包,再回一个ACK
包(ack=y+1
)告诉服务端已经收到 - 三次握手完成,成功建立连接,开始传输数据
TCP要求建立连接之后所有报文的ACK都要置1
两次握手为什么不行
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。
三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
A 告诉 B 自己的序列号起始值,B回复A 自己的起始值, B需要知道A收到了这个答复,否则就无法确定双方实现了同步。
为了防止历史连接,两次握手不能判断当前连接是否为历史连接。
如果A发给B的确认丢了
A不会超时重传,因为TCP不会为没有数据的ACK超时重传。
处理方法是:B如果没有收到A的ACK,会超时重传自己的SYN同步信号,直到收到A的ACK为止。
- 客户端发送
FIN = 1
给服务端,告知数据发送完毕,请求终止连接。客户端不发送数据可以接收数据。 - 服务端收到
FIN
包,回复ACK
包 - 等待数据传输结束,服务端向客户端发送
FIN
包,表明可以断开连接 - 客户端回复ACK包表明确认收到,等待2MSL时间后,确保没有数据发送,断开连接。
FIN = 1 时表明此报文的发送方数据全部发送完毕,要求释放连接
- 主动断开连接的一方会进入TIME_WAIT状态,持续2MSL。这期间被动关闭连接的一方持续重传FIN直到收到ACK。
为什么客户端连接要等待2MSL的时间才能完全关闭
MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃
- 保证客户端发送的最后一个ACK报文段能够到达服务端。
- 防止“已失效的连接请求报文段”出现在本连接中
服务器怎么判断客户端断开了连接
- tcp内部机制 :keepalive,它会先要求此连接一定时间没有活动(一般是几个小时),然后发出数据段,经过多次尝试后(每次尝试之间也有时间间隔),如果仍没有响应,则判断连接中断。可想而知,整个周期需要很长的时间。
- 应用层实现心跳包功能 ,客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。
TCP 协议的延迟 ACK 和累计应答
- 延迟应答: TCP在接收到对端的报文后不会立刻发送ack,而是等待一段时间之后将ack和要发送的数据一起发送
- 累计应答: 为保证顺序性,每个包都有一个ID,建立连接时确定起始ID。为保证不丢包,对每个包都要进行应答
TCP加速传输
- **连接优化:**建立连接时如果丢包会进入重试,缩短重试时的等待时间可加快连接速度。
- 平滑发包:
快重传
如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK,发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出再发送该报文。
11、滑动窗口
- 滑动窗口是传输层进行流量控制的一种措施
- 滑动窗口是TCP中实现ACK确认、流量控制、拥塞控制的承载结构
- 滑动窗口大小意味着接收方有多大的缓冲区可以用来接收数据,发送方通过滑动窗口的大小确定应该发送多少字节的数据
A 向 B 发送数据,B对 A进行流量控制。控制发送窗口的大小,告知A还能发送多少数据。
A 有超时重传机制,数据丢失之后重新发送。
接收方通知窗口大小的报文丢失
B 通知 A 有新的存储空间可以发送数据,但是通知的报文丢失。A 持续等待B通知的非零窗口报文,B等待A发送数据;造成死锁现象
解决办法
- TCP设置有一个计数器,计时器超时,A 发送一个探测报文向B确认,B重新发送非零窗口报文,打破死锁;
12、TCP拥塞控制
慢开始、拥塞避免
快重传、快恢复
- 快重传 就是使发送方尽快进行重传,不是等超时重传计时器超时再重传。
- 接收方不能等待自己发送数据时再确认接收,而是要立刻确认。
- 收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
- 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传
- 快恢复 发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;
发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法
拥塞窗口是发送端根据网络拥塞情况确定的窗口值,发送端在真正确定发送窗口时,应该取“通知窗口”和“拥塞窗口”的最小值。