1、OSI 七层模型:应用层、表示层、会话层、传输层、网络层、链路层、物理层(口诀:因 婊 会 传,网恋无)
2、TCP/IP (协议族)
应用层:FTP、SMTP、http、DNS、Telnet
传输层:TCP、UDP
网络层:IP。。。
链路层:ARP、RARP
重点:应用层、传输层、网络层
3、MAC地址:ipconfig -all
Mac地址用于局域网内(或者说同一个子网内)的寻址;IP地址用于不同子网间的寻址
4、TCP 特性:面向连接、可靠性传输:超时重传机制、应答确认机制
超时重传:
超时重传机制中最最重要的就是重传超时(RTO,RetransmissionTimeOut)的时间选 择,很明显,在工程上和现实中网络环境是十分复杂多变的,有时候可能突然的抽风,有时 候可能突然的又很顺畅。在数据发送的过程中,如果用一个固定的值一直作为超时计时器的 时长是非常不经济也非常不准确的方法,这样的话,超时的时长就需要根据网络情况动态调整,就需要采样统计一个数据包从发送端发送出去到接收到这个包的回复这段时长来动态设 置重传超时值,这个时长就是为 RTT,学名 round-triptime,然后再根据这个 RTT 通过各种 算法和公式平滑 RTT 值后,最终确定重传超时值。
数据排序:
而 IP 层进行数据传输时,是不能保证数据包按照发送的顺序达到目的机器。当 IP 将把 它们向‘上’传送到 TCP 层后,TCP 将包排序并进行错误检查。TCP 数据包中包括序号和确认, 所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
滑动窗口:
TCP 还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用 以限制发送方的发送速度。
全双工:
同时 TCP 还允许在一个 TCP 连接上,通信的双方可以同时传输数据,也就是所谓的全 双工。
TCP连接是虚拟连接,它的连接可能有很多路径,不像电话一样是真实的物理连接
5、TCP建立连接:
三次握手:
为什么需要3次握手?
TCP是面对连接的,所以需要双方都确认连接的建立。具体怎么实现的?握手过程中,会发送seq序列号确认。
6、TCP 三次握手的漏洞-洪泛攻击
攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有的),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
解决方案:防火墙
7、四次挥手
为什么服务端不把ACK和FIN报文合并为一次发送?因为 服务端可能还有数据要发送给客户端,等没有数据要发送了,才发送FIN结束报文。当然,有可能确实没有数据了,ACK和FIN 就一起发送了。
7.1、为什么TCP挥手要四次?
因为TCP是全双工连接,要保证双方都关闭连接,必须要双方都发送FIN结束报文给对方,对方收到后,回复ACK报文。
7.2 、为什么需要TIME_WAIT状态
主要有2点:第一,可靠的TCP连接,客户端收到服务端的FIN报文后,不能立即关闭,需要发送ACK报文;第二,保证让迟来的 TCP 报文有足够的时间被识别并丢弃。因为 报文在网络中是有可能丢失的,如果服务端没有收到客户端最后的ACK确认报文,是会进行重发FIN结束报文的,假如此时这个连接进入CLOSED关闭状态了,则此时应用程序能建立一个和刚关闭的连接相似的连接(这里的相似,是指他们具有相同的 IP 地址和端口号)。新的连接可能收到属于原来的连接数据的TCP报文段(迟到的报文段),这显然是不该发生的。也基于这个原因,TIME_WAIT的时间一般设置为 2*MSL(TCP报文段的最大生存时间是MSL,Windows : MSL = 2 min;linux(Ubuntu, CentOs) : MSL = 60s;Unix : MSL = 30s),足够的时间保证报文响应完毕或者被丢弃。然后才CLOSED。