网络原理之TCP-IP

1.应用层作用:满足日常需求的网络程序,都是在应用层
DNS协议:从域名到IP地址(域名->IP)
NAT/NAPT:NAT技术,将私网IP转换为公网IP。NAPT技术,将私网IP+port(端口)转换为公网IP+port

2.传输层作用:负责数据能够从发送端传输到接收端
端口号:标识主机上不同的应用程序
用源IP,源端口号,目的IP,目的端口号,协议号这样的五元组来标识一个通信
windows查看某个端口:netstat -ano | findstr “端口号”(显示进程的pid)
Linux查看某个端口号:netstat -anp|grep “端口号”(显示进程的pid)
0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的
SSH服务器:22端口
FTP服务器:21端口
Telnet服务器:23端口
HTTP服务器:80端口
HTTPS服务器:443端口
1024-65535:操作系统动态分配的端口号,客户端程序的端口号,由操作系统从这个范围分配

3.UDP协议

16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度
校验和出错,直接丢弃数据包
UDP特点:1.无连接,知道对端的IP和端口号就直接进行传输,不需要建立连接
2.不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
3.面向数据报:不能够灵活的控制读写数据的次数和数量,即应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并
4.UDP缓冲区:具有接收缓冲区,但是没有发送缓冲区(如果缓冲区满了,再到达的数据就会被丢弃)
5.UDP能够传输的数据最大长度是受限的,不能超过64K,由16位UDP长度所限制。

4.TCP协议:协议头包括:源端口+目的端口+长度+校验和+数据

源/目的端口号:表示数据从哪个进程来,到哪个进程去
TCP报头占20字节,以太网上传TCP至少得是64字节,否则就会当成碎片丢弃,mac目标地址和源地址共占12字节,2字节type域,帧尾校验符4字节,数据域最大为1518-6-6-2-4=1500(MTU)
TCP上传时至少为64字节,而其中IP占20字节,tcp报头占20字节,加上刚刚的18字节仍需要填充6字节,这部分交给MAC层进行数据补齐。UDP报头长46字节,需要补18字节。
6位标志位:URG:紧急指针是否有效
ACK:确认信号是否有效
PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
PST:对方要求重新建立连接,把携带RST标识的称为复位报文段
SYN:请求建立连接,把携带SYN标识的称为同步报文段
FIN:通知对方,本端要关闭了,称携带FIN标识的为结束报文段
16位校验和:发送端填充,CRC校验,接收端校验不通过,则认为数据有问题,此处的检验和不光包含TCP首部,也包含TCP数据部分
16位紧急指针:标识哪部分数据时紧急数据;
MTU针对数据链路层,规定了数据包的大小,会影响到MSS的大小,MSS是双方通信时每个报文段最大能承载长度(不包括报文段头)。

5.TCP八大特性:
(1)确认应答
发送数据包携带序列号,响应数据包携带确认序列号,发送端可以知道哪些数据已经收到

(2)超时重传
主机A发送消息给主机B可能因网络拥堵造成数据无法到达,此时主机A长时间收不到主机B的应答信号,那么主机A就会重发,依赖缓冲区重发,属于系统操作,与代码无关。

同时也可能由于是主机B的ACK丢失,这种情况主机B就会重发ACK并且主机A也会重发数据,当多个相同数据包到达主机B,主机B会收到很多重复消息,但是TCP的序列号就可以帮助去重

超时时间的确定:固定网络下,时间为单次数据传输的最大时间*2,即发送+响应两次传输,但实际情况网络是波动的,这个时间也是动态变化的
(3)连接管理
正常情况下TCP连接都要进行三次握手建立连接和四次挥手断开连接,
三次握手:

三次握手流程:(假设AB进行连接)
–1.A发送SYN请求与B建立连接
–2.B收到请求,也发送一个SYN请求建立连接,同时回复一个ACK响应代表已经收到请求。
–3.A收到B的SYN+ACK后回复一个ACK给主机B
四次挥手流程:

(4)流量控制:
接收端的接收能力有限,需要提前告知发送端发送数据的大小,通过窗口字段(接收端缓存区大小)来设置
接收端缓冲区如果很快被发送端发送的消息装满,就会将TCP首部中的窗口大小设置成一个较小的值,返回给发送端,以减慢发送端发送速度。否则当接收端缓冲区已满,会将刚刚到来的数据丢弃,并且发送端收不到接收成功的ACK响应,又会认为数据包已经丢失,继续重发,这样造成恶性循环以至于网络资源浪费。发送端也会定时发送一个探测包,检测是否接收缓存区有大量空间可以继续发送数据了。
(5)拥塞控制
刚开始的时候发送端不清楚网络状况,先发少量的数据包测试,如果网络状态良好,那么发送端就会以指数级增长的速度发送数据包,但是当拥塞窗口超过这个阈值就不再按照指数方式增长,而是按照线性方式增长,当TCP开始启动的时候,慢启动阈值就是窗口最大值;每次超时重发时,阈值就要变为原来的一半,同时拥塞窗口大小置为1

(6)滑动窗口

窗口大小指的是无需等待确认应答而可以继续发送的最大值,图中显示窗口大小为4000个字节(每段1000字节,由发送端阻塞窗口+接收端流量控制窗口决定)
发送前四个段不需要等待ACK,直接发送,收到第一个ACK窗口向下滑动一位,窗口范围由1-4000变为1001-5000,收到四个ACK后窗口范围变为4001-8000.同时为了维护这个滑动窗口,操作系统要开辟缓冲区记录当前哪些数据还没有ACK确认收到,对于这些数据要重新发送,直到ACK确认对端消息已经收到才能从缓冲区删除,窗口越大,网络吞吐率越高
对于没有滑动窗口的丢包情况,假如此时数据包抵达,ACK丢了,就会重发这一段数据直到收到该段的确认ACK才会继续发后面的信息。
如果有滑动窗口,假设发送了1-4000,但是1001-2000丢失,此时就会一直发送1001的ACK,意思是1-1000收到了,但是没有收到1001后面的数据,请求重发,当发送端发送该段且接收端收到后,接收端会直接返回4001的ACK,因为对于2001-4000的ACK其实已经在缓冲区等待发送了,但是缺少1001-2000的ACK,收到以后就可以一同返回给发送端确认这部分数据全部接收成功。
(7)延迟应答
接收端接收到数据包,不用马上返回ACK,而是等待一段时间,让进程有一段时间可以处理缓冲区的数据,这样返回的ACK数据可以将窗口字段设置的更大,此时就利用了接收端流量控制机制影响了发送端滑动窗口大小。
假设没有延迟应答,那么当接收缓冲区处理一部分数据就会立马返回ACK,如果处理速度很快,但是接收缓冲区又很大,比如接收缓冲区大小为1M,发送端发送了500K数据,此时返回的窗口字段值就是500K,但是10ms接收端就处理完了这500K数据,此时即使窗口字段设置大一点也能处理过来,如果延迟应答,比如延迟20ms,让接收端处理完毕再返回窗口字段,就能得到一个大小1M的窗口字段值。而窗口越大,网络吞吐量越大,传输效率越高。
(8)捎带应答
有些数据包是可以合并的,比如ACK响应和自己要发送的数据包,只需要利用延迟应答的特性,将这些数据合并在一起一次性返回给对端,可以提高发送效率

TCP特点:
–1.可靠性提供了一系列机制保证可靠性,如确认连接,超时重传,流量控制,拥塞控制,连接管理
–2.效率,由滑动窗口,延迟应答,捎带应答提高效率,但还是没有UDP效率高
–3.面向字节流,发送/接收缓冲区保存数据

粘包问题:TCP存在而UDP不存在如何避免:明确包之间的分解(分隔符,长度),站在传输层的角度来看,TCP发送的是一个个的报文,且按照序号排列好的,但是应用层看到的就是一连串的字节数据。

TCP异常情况:
–1.进程终止,进程终止会释放文件描述符,仍然可以发送FIN,与正常关闭没区别
–2.机器重启,与进程终止情况相同
–3.机器掉电,接收端认为连接还在,一旦接收端没有写操作,接收端发现连接不存在就会进行reset操作。即使没有写入操作,TCP内置保活定时器,定期询问对方是否还在,如果不在了就会释放连接。

长连接/短连接:短连接收到数据响应之后就会关闭连接,而长连接不会释放连接。

TCP和UDP区别:
–1.UDP无连接,TCP有
–2.UDP不可靠,TCP可靠
–3.UDP面向数据报,TCP面向字节流
–4.UDP更高效(因为不用保证可靠性)

如何用UDP实现可靠的传输?
参考TCP的可靠传输方式,如引入序列号,保证数据顺序,引入确认应答,保证对端收到数据,引入超时重传,隔一段时间没有应答就重发数据

网络层:
–1.作用:在复杂的网络环境中确定一个合适的路径

IP协议
*主机配有IP地址,但是不进行路由控制的设备。
*路由器配有IP地址,又能进行路由控制。
*节点:主机和路由器统称
协议头格式:

4位版本号:指定IP协议版本,如IPV4,IPV6
4位首部长度:IP头部长度有多少个32bit,即length*4字节,4bit(1111)最大为15,所以IP头部最大长度为60字节
8位服务类型:3位优先权字段(弃用),4位TOS字段和1位保留字(必须置为0),4位TOS表示最小时延,最大吞吐量,最高可靠性,最小成本,四者相互冲突只能选一个。
16位总长度:IP数据报整体占多少字节
8位生存时间(Time To Live):数据报到达目的地最大报文跳数,每经过一个路由,TTL-1,一直减到0还没到就弃用了,主要为了防止路由循环。
8位协议,主要表示上层协议类型
16位头部校验和:使用CRC进行校验,鉴别头部是否损坏
32位源地址和32位目标地址:表示发送端和接收端

网段划分
–1.IP地址分为两部分,网络号和主机号,网络号保证互连的两个网段具有不同的标识。主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
–2.五类IP地址
*A类0.0.0.0到127.255.255.255
*B类128.0.0.0到191.255.255.255
*C类192.0.0.0到223.255.255.255
*D类224.0.0.0到239.255.255.255
*E类240.0.0.0到247.255.255.255
–3.子网掩码:子网掩码也是一个32位正整数,通常用一串0来结尾,将IP地址和子网掩码进行按位与操作,得到结果就是网络号,得到结果就是网络号,网络号和主机号的划分与这个IP地址是ABCDE类无关
–4.特殊地IP地址:将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
127.*的IP地址用于本机环回测试,通常取127.0.0.1

路由:在复杂网络结构中找出一条通往终点的路线
一个路由器可以配置两个IP地址,一个是WAN口IP(公网IP),一个是LAN口(子网IP)。
路由器LAN口连接的主机,都从属于当前这个路由器的子网中。
不同的路由器,子网IP都是一样的(通常都是192.168.1.1),子网内的主机IP不能重复,但是子网之间的IP地址可以重复。
子网内的主机要和外网进行通信,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术叫NAT技术(Network Address Translation,网络地址转换)
本机路由表可在cmd中使用route命令查看

数据链路层:
–1.作用:两个设备(同一个数据链路节点)之间进行传递数据
–2.以太网:不是一种网络,而是技术标准,既包含了数据链路层的内容,也包含了物理层的内容
–3.MAC地址:MAC地址用来识别数据链路层中相连的节点。
*MAC地址和IP地址:IP地址描述的是路途总体的起始点,MAC地址描述的是路途上每一个区间的起始点
–4.MTU协议,MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制。如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,就需要对数据包进行分片
*MTU对IP协议的影响:由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。使用IP协议头中3位标志字段,16位标识,13位分片偏移,在发送端进行分片,或者在接收端还原都需要使用这些字段。每个小包IP协议头的16位标识(id)都是相同的。
MTU对UDP的影响,分片之后,任意一个丢包,整个源数据包就不可用了
MTU对TCP的影响,TCP的一个数据也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度成为MSS(MaxSegment Size);最理想情况下,MSS的值正好是数据包不会被处理的最大长度(这个长度仍然受制于数据链路层的MTU)
*ARP协议:ARP协议建立了主机IP地址和MAC地址的映射关系
–在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
–数据包首先是被网卡接收再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
–因此通信前必须获得目的主机的硬件地址
每个主机都维护ARP缓存表,可以在cmd中用arp -a命令查看

UDP实现可靠传输:
**采用确认应答确保数据包已经收到,引入序列号确保数据包的完整性,采用拥塞控制防止出现网络用塞导致的丢包,采用超时重传确保丢失的数据包可以重新发送到客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值