我们平时上网,其实是借助浏览器发起一个http请求到服务器指定端口(默认80),从而获得服务器上存储着的资源。而这些资源则要通过TCP/IP协议将它们传输到网络上。也就是说WEB服务器通过http协议做应用层协议,来识别数据内容,然后利用TCP/IP协议将其传输到网络上,使数据有意义。我们经常听到的socket不是一个协议,它是对TCP/IP的封装,可以把它理解为一个API接口。
应用层
传输层
应用层向TCP层传输的8byte表示的数据流,然后TCP把数据流分割为合适的报文段丢给IP层,而TCP的一套可靠传输机制可以保证可靠传输。
拥塞控制和流量控制的区别?
- 目的:
顾名思义,拥塞控制就是为了防止过多的数据涌入网络,造成路由器的负载;
流量控制就是为了控制数据流的速率,以便保证通信双方发送和接收速率大致相同; - 范围:
TCP连接的端口如果迟迟接收不到对方的ACK,它就会认为当前网络的某个地方出现了拥塞,一般是涉及很多主机啊、路由器啊等一些降低TCP传输性能的东西,这是一个全局性的问题。而流量控制往往是点对点通信量 的控制,是接收端控制的发送端,比如:在某个光纤网络,链路传输速率为1000Git/s,有个巨型计算机以1G/s的速率传送文件给PC,它们的性能严重不匹配,这显然需要做流量控制,就像一个大人和一个小孩子比手腕,难道不应该限制大人的力量吗?这是一个端对端的问题。 - 方式:
流量控制主要是通过接收方改变接收窗口大小来实现的(滑动窗口);而拥塞控制是通过拥塞避免算法来实现的,比如:慢开始、拥塞避免、快重传、快恢复等。
它们之所以常常混淆原因是拥塞避免算法是Route向发送端发送控制报文,并告诉发送端,前方已经塞车啦,你需要放慢哦,这点和流量控制很相似。
- 目的:
什么是TCP快速重传?
如果一方收到了3个或者3个以上ACK,那哪怕还未达到超时重传时间,仍将进行重传;上面提到的流控主要通过滑动窗口来实现,那么什么是sliding window呢?
它在确认通信前发送多个数据分组,还发送滑动窗口控制信息,我觉得它就像一个临时仓库,决定了收到确认前可发送的字节数,允许接受端在拥有容纳足够数据的缓冲前对传输进行限制。这种机制使网络始终处于忙碌状态,提高了传输效率,实现了流控。
我们需要特别注意2点:
1. TCP Packet中有一个字段叫windows,而UDP没有,这说明只有TCP才有窗口机制;
2. 实际运行中,TCP滑动窗口的大小是可以随时调整的;
3. 一旦发现错误,将立即进行重传;分组交换是啥子勒?
分组又称消息或消息碎片,分组交换是相对于电路的通信规范,一个数据连接通常传送Data的分组流(IP包分片),目的计算机将收到的报文按照一定的顺序重新排列,就能合并恢复出原来的内容。可分为TCP和UDP,前者即面向连接虚电路方式,需要先建立一个逻辑连接,然后所有分组言相同路径交换转发;后者即面向无连接数据报方式,以分组的形式在网络中传输,不可靠。
注意这里的分组交换和上面提到的数据分组不是同一个概念,请自行理解TCP四次挥手,主动关闭方最后为什么要等待2MSL之后才关闭?
- 保证TCP协议的全双工连接能够可靠关闭;
- 保证本地连接的重复数据段从网络中消失;
为什么需要三次握手中的序列号和确认号?/为什么初始序列号那么大?/为什么tcp初始序列号要是一个随机数?
- 防止连接失效后的socke被残留的数据包错误接收;
- 防止黑客轻易知道序列号进行tcp序列号攻击,不过即使这样tcp序列攻击仍有可能发生,所以有很多tcp序列号生成算法(IEDA算法和MD5算法等)
简单来说就是这样更加安全,可以防止会话劫持,而不是可靠传输。
四次挥手为何需要最后那次握手?
主要是防止已经失效的又传到了B,B认为这是新的连接,然后再次发送ACK等待A发送Data,因而资源浪费。三次握手也是同理,A收到B的ACK后就OK了,而B没有收到A的ACK就知道A没有要求建立连接了,若B傻傻的等着A的ACK后果将不堪设想······
网络层
端口号为何是65536个?
端口号是双字节的 ——> 1byte=8bit ——> 2^8*2^8=65536 (0-65535)谈谈IP?
IP协议是啥子?
Internet Protocol互联网协议又名IP,IP地址是接入互联网的一张身份证,存在于电脑、手机、照相机等任何需要联网的设备,它占据了TCP/IP协议栈的半壁江山。IP协议的原理?
思考2个问题:
(1)、上网时,服务器如何区分不同电脑的请求,并将准备资源返回?(以PC1访问S为例)
众所周知,PC1在请求包里面封装好源目IP,并将带有IP地址(身份证)的包发送至S,然后S根据包的IP地址查找路由表(地图),然后以接力棒的形式逐跳发送给目标S,目标S收到请求data后翻转源目IP,回应数据包也就是说,通信里的数据包会嵌入源目IP地址,类似“快递单”,通过IP地址的唯一性为路由器指明通信方向——解决了谁送给谁的问题
(2)、为何IP协议面向无连接不可靠传输?
IP协议并不能保证包一定到达目的S,传输过程中数据可能会被丢弃,丢弃后包如何处理?丢包是否需要重传?这些问题则是由TCP/IP协议栈到的另外半壁江山TCP来解决,可以说,正是由于TCP和IP的相辅相成才保证了通信的成功和安全不同主机间需要一个可靠、像管道一样的连接,但IP层不提供这样的流机制,而只提供不可靠的包交换。
(3)、IP协议除了IP寻址(快递单)功能,还有什么功能?
它还能进行流量控制、实现数据包分片和重组、防止数据包环路、完整性校验。
IP协议头部?
1. Version版本号:IP的版本,目前ipv6慢慢为主流;
Header Length头部长度:用于“划分界限”,哪里是头部,哪里是数据,防止越界数据包损坏,默认20byte,最大60byte;一般联网设备的网卡模块收到数据包时会对其进行拆分、修改头部信息、重新封装······
DSF服务区分符:TOS的前身,为不同的IP数据包定义不同的QoS,实现流量控制。企业网中,网络运维人员可以为核心数据流采用高优先级的DSCP值,为普通的数据流采用普通,则当2 者同时访问互联网时,优先转发核心数据流;运营商网络,可以根据客户购买的不同专线服务采用不同DSCP
Total Length总长度:IP头部+Data,最大为65535byte;
ID标识符:用于IP分片,识别属于同一数据包的分片,标识分片属于哪个进程;
Flags标识符:确认是否还有分片,最后一个分片设置为0,其他为1;
Fragment offest分片偏移量:标识IP分片的位置,实现IP分片重组;
TTL生存时间:标识IP数据包“还能存活多久”;还可用于防止数据包环路,即使网络拓扑存在环路设计,但每经过一个路由器或三层设备,TTL都会减一,当TTL=0时网络设备会直接丢弃包;
Protocol协议号:标识传输层协议
这些字段功能都是用于标识上层协议或应用。,意义何在?
(1)、TCP/UDP协议的port字段;
(2)、IP协议的protocol如:ICMP为1,TCP为6,UDP为17;
(3)、以太网协议的TYPE字段,如:IP基于Ethernet,它的Type类型为0x0800;
标识上层协议应用,告诉接收方,用正确的协议/应用来打开这个Data,功能相当于文件类型,告诉电脑用哪些应用程序打开Header checksum头部校验:通过校验算法验证Data是否完整,没问题则接受处理,有问题则丢弃;
Source和Destination源目IP:均为32bit;
OSI
- 谈谈OSI七层协议?
OSI也就是二大板块:
- 应用高层:定义了数据如何产生,在通信主机上完成,包括应用层、表示层、会话层;
应用层:能和应用界面交互,如:HTTP、FTP、SSH、TELNET、SMTP;
表示层:加密、编码、格式,使用户能够读取正确的数据;
会话层:双方通讯,建立、注销会话; - 数据流层:定义了数据如何传输,在网络设备是完成,包括传输层、网络层、数据链路层、物理层;
传输层:可靠传输(帧错及错误处理),分段重组(流控),以确保通讯顺利,如:TCP、UDP;
网络层:封装成数据包,联通网络,通过考虑QoS、Priority、拥塞程度来选取最佳路径,如:IP、ICMP、IGMP;
数据链路层:传递帧信号,实现二层寻址,设备如:Switch、Bridge;
物理层:传递bite信号,定义了设备接口和物理标准,设备如:Hub
- 应用高层:定义了数据如何产生,在通信主机上完成,包括应用层、表示层、会话层;
- 物理层和数据链路层的区别?
物理层与设备和媒介的交互有关,告诉设备如何传送信号到媒介,媒介又如何接受;而数据链路层更多关注媒介和设备之间的互动,告诉设备如何和媒介连接;