【网络原理】知识点汇总2
网络编程
- 什么是端口号?
端口号(port)是传输层协议的内容.
①、端口号是一个32位的整数;
②、端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
③、IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;一个端口号只能被一个进程占用.
一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;
socket编程
【socket 常见API】
一、DatagramSocket类
二、ServerSocket类【TCP】
三、Socket类
网络协议
认识UDP协议
UDP(User Datagram Protocol 用户数据报协议):不保证安全,性能较好(UDP传输的过程类似于寄信)
①、传输层协议:有接收缓冲区,没有发送缓冲区
②、无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接;
③、不可靠传输:没有确认应答机制、超时重传机制、连接管理机制
④、面向数据报:最大不超过64k,不能够灵活的控制读写数据的次数和数量
UDP的socket既能读, 也能写, 这个概念叫做全双工
⋙基于UDP的应用层协议
NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
DNS: 域名解析协议
认识TCP协议
TCP(Transmission Control Protocol 传输控制协议):对数据的传输进行详细的控制。
①、传输层协议
②、有连接
③、可靠传输
④、面向字节流
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
基于TCP应用层协议:
HTTP、HTTPS、SSH、Telnet、 FTP、 SMTP
TCP为什么安全?
一、确认应答(ACK)机制
序号+确认号实现 : 每一个ACK都带有对应的确认***, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你从哪里开始发.
如上图所示,可以简单理解为
二、超时重传机制
1、系统基于TCP协议实现,动态计算报文的最大生存时间(MSL),超时时间设置为2MSL;
2、作用:超过超时时间,表示丢包(发送数据报、接收确认数据报),需要重新发送数据报(系统中发送缓冲区保存有数据,可以重发)
三、连接管理机制
在正常情况下, TCP要经过三次握手建立连接, 四次挥手断开连接
1、建立连接:都是单方面建立连接
(以前一个学长总结的三次握手如图所示,这样很好理解)
2、关闭连接
CLOSE _WAIT状态:服务端程序没有调用close方法,导致出现大量的连接处于CLOSE_ WAIT状态,代表半关闭,是一种bug
1、在第三次数据传输,服务端发送FIN请求到客户端,客户端处于TIME_ _WAIT,为什么不能设置为CLOSED?
答:第四次ACK响应报文可能丢包,导致服务端无法关闭连接,需要服务端重新发送FIN请求,所以客户端必须等待最大超时时间(2MSL)
2、TIME_ WAIT为什么是2MSL?
答:返回的ACK传输时间+服务端重新发送FIN的传输时间
3、发送端、接收端:单次数据发送时,存在发送端发送数据到接收端。在多次数据发送时,双方可以是发送端,又可以是接收端
1、滑动窗口
处于发送端,提高性能:
窗口大小:指的是无需等待确认应答而可以继续发送数据的最大值.上图的窗口大小就是4000个字节(四个段).
①、依赖ack响应报文中的窗口大小字段
②、依赖拥塞控制窗口大小
ack响应报文中,携带下一个序号是多少。—> 表示在此序号之前的所有数据都已经接收到
窗口的滑动:
依赖ack响应报文中的下一个序号来进行滑动,而下一一个序号是多少,又依赖接收到的连续报文的最大序号
【原理】
操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉:
接收缓冲区保存有响应ack数据的信息,可以根据ack丢包进行重发 这种机制被称为“高速重发控制"也叫"快重传”.
2、流量控制
TCP支持根据接收端的处理能力, 来决定发送端的发送速度:
①、接收端:通过TCP协议头中的“窗口大小”字段,告诉发送端,发送数据的大小。
②、目的:接收端接收能力有限,为了防止接收缓冲区被打满,再接收数据就直接丢弃。使用窗口大小可以告诉发送端发送数据的大小。
3、拥塞控制
- 因为网络上有很多的计算机可能当前的网络状态就已经比较拥堵.在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪.上加霜的.
- TCP引入慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态再决定按照多大的速度传输数据;
【原理】
拥塞窗口初始值设为1,以慢启动指数级增长的方式,达到一定阈值转变为线性增长的方式
拥塞窗口增长速度, 是指数级别的. “慢启动” 只是指初使时慢, 但是增长速度非常快.TCP拥塞控制这样的过程, 就好像热恋的感觉
当TCP开始启动的时候, 慢启动阈值等于窗口最大值;在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;
4、延迟应答机制
1、原理:
接收到多个数据报时,不针对每条数据报响应ack,而是延迟一定时间, 这样接收缓冲区数据很快被处理,可用空间就更大,返回的窗口大小字段就可以设置的更大,使网络吞吐量更大,传输效率更高。
2、延迟的依据:
(1)、 数量
(2)、时间都是由系统决定
5、粘包问题
【解决办法】
明确两个包之间的边界(应用层用户程序中使用协议来进行数据的解析/格式化)
UDP不存在粘包问题
6、心脏检测体制(了解)
分布式项目、集群:类似在应用层程序中实现类似TCP超时重传机制的功能,目的是判断连接是否还存活
7、MTU
如果一个数据包从以太网路由到拨号链路上数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;
数据封装,到数据链路层,会根据MTU协议进行分片/拆包发送;
原理:使用IP协议头中的字段
为什么TCP这么复杂? 因为要保证可靠性, 同时又尽可能的提高性能.
①、可靠性:
- 校验和
- ***(按序到达)
- 确认应答
- 超时重发
- 连接管理
- 流量控制
- 拥塞控制
②、提高性能:
- 滑动窗口
- 快速重传
- 延迟应答
- 捎带应答
③、其他:
- 定时器(超时重传定时器, 保活定时器, TIME_WAIT定时器等)
TCP/UDP对比
- TCP用于可靠传输的情况, 应用于文件传输, 重要状态更新等场景;
-
UDP用于对高速传输和实时性要求较高的通信领域, 例如,
早期的QQ, 视频传输等. 另外UDP可以用于广播;