以太网帧结构:
类型为0x0800时,表示网络层使用的是IP协议
IP数据报格式
首部长度: 占4位,单位为4字节,最大为1111,所以首部长度最长为60字节;最常用的首部长度为20字节,这时候没有选项和填充,首部字段为0101;
总长度:单位为字节,最大长度为2^16-1=65535字节,因为数据链路层有MTU的限制,所以总长度一般不超过1500字节;超过的时候,就进行分片;
片偏移:片偏移以8个字节为偏移单位,即每个分片的长度必须是8字节的整数倍;
数据包与虚电路:
虚电路:在源节点与目的节点之间建立一条逻辑链接,所有的报文都经过这条链路传输,传送时不需要添加目的地址,报文总是按顺序到达终点。链路上有节点出故障时,就不能正常工作了,思想是由网络来保证可靠通信。
TCP三次握手
SYN报文:SYN=1,seq=x,ACK=0;
SYN+ACK报文:SYN=1,seq=y,ACK=1,ack=x+1;
ACK报文:seq=x+1,ACK=1,ack=y+1;
SYN报文和SYN+ACK报文即使不携带数据也要消耗一个序号
ACK报文如果不携带数据就不消耗掉一个序号
TCP四次挥手
FIN+ACK报文:FIN=1,ACK=1,seq=u,ack=v
ACK报文:FIN=0,ACK=1,seq=v,ack=u+1
FIN+ACK报文:FIN=1,ACK=1,seq=w,ack=u+1
ACK报文:FIN=0,ACK=1,seq=u+1,ack=w+1
FIN报文即使不携带数据也要消耗一个***。
在TCP协议中,处于last_ack状态的连接,如果一直收不到对方的ack,会怎么办?
B发送FIN,进入LAST_ACK状态,A收到这个FIN包后发送ACK包,由于某种原因,这个ACK包丢失了,B没有收到ACK包,然后B等待ACK包超时,又向A发送了一个FIN包
a) 假如这个时候,A还是处于TIME_WAIT状态(也就是TIME_WAIT持续的时间在2MSL内)
A收到这个FIN包后向B发送了一个ACK包,B收到这个ACK包进入CLOSED状态
b) 假如这个时候,A已经从TIME_WAIT状态变成了CLOSED状态
A收到这个FIN包后,认为这是一个错误的连接,向B发送一个RST(RESET)包,当B收到这个RST包,进入CLOSED状态
c) 假如这个时候,A挂了(假如这台机器炸掉了)【第四种情况,不在参考链接里】
B没有收到A的回应,那么会继续发送FIN包,也就是触发了TCP的重传机制,如果A还是没有回应,B还会继续发送FIN包,直到重传超时(至于这个时间是多长需要仔细研究),B重置这个连接,进入CLOSED状态,
IP和域名的对应关系?
一个IP地址可以对应多个域名
一个域名对应多个IP地址的话,可以轮训让这个域名具体对应哪个IP地址,实现负载均衡?
为什么有的网站不允许直接使用IP地址进行访问?
试了一下,百度可以直接使用IP地址进行访问,其他的网站一般都不运行直接使用IP地址进行访问,例如搜狐,CSDN,熊猫TV等。
如果允许使用IP地址进行访问的话,可能会出现这样的情况,其他的网站将他们的域名绑定到我们的IP地址,这样访问他们的域名将跳转到我们的网页。
好处:增加流量
坏处:影响网页排名,可以会把我们的网页当成复制的,有作弊的嫌疑,影响搜索引擎排名。
电子邮件:
组成:用户代理(电子邮件客户端软件),邮件服务器,邮件协议(邮件发送协议和邮件读取协议)
SMTP,POP3,IMAP4都是基于TCP的
邮件发送协议:SMTP,客户端到发送方服务器,发送方服务器到接收方服务器
邮件读取协议:POP3,IMAP4,接收方服务器到接收方
基于万维网的电子邮件:
电子邮件从A到网易的邮件服务器是HTTP协议,两个邮件服务器之间是SMPT,邮件从新浪服务器到B是HTTP协议
TCP与DUP区别:
TCP:
1.TCP是面向连接的,在消息发送前,客户端与服务器要建立链接
2.TCP只能是点对点的,每一条TCP连接只能有两个端点
3.TCP是可靠的,有用赛控制和流量控制等
4.TCP是面向字节流的
UDP:
1.无连接的
2.尽最大努力交付,和IP一样
3.UDP是面向报文的,对于应用层交下来的报文,UDP只添加首部就交付给IP层,不进行分割,合并等。
4.UDP支持一对一,一对多,多对多
5.UDP首部开销小,只有8个字节
路由协议
关于路由协议需要把握三点:和哪些路由器交换信息,交换什么信息,在什么时候交换信息
RIP使用UDP,OSPF使用IP,BGP使用TCP。
RIP
路由信息协议,基于距离向量,一条路径最多只能包含15个路由器,16为不可达。
1.只和相邻的路由器交换信息
2.交换的信息是自己的路由表
3.固定时间间隔交换信息,例如30秒
路由更新算法:
接收到相邻路由器发送过来的路由信息时,
如果自己没有这条路由信息,就把这条路由信息添加到自己的路由表中,并且把下一跳路由器设置为这个相邻的路由器,距离+1;
如有有这条路由消息,就看它的距离+1是否小于我的记录,是,则更新,否不更新
//如果通过该相邻路由器到某个网络的路由信息没了,则把对应的删除。
OSPF:
使用分布式的链路状态协议
通过洪泛向自治系统(区)中所有路由器发送消息
发送的消息是与本路由器相邻的所有路由器的链路状态
只有当链路状态发生变化时,才发送消息。
自治系统中每个路由器都存储了邻居表,链路状态数据库LSDB,路由表。
BGP
目的是寻求一条能够到达目的网络且比较好的路由,并非要找到一条最佳路由,采用路径向量路由选择协议,与距离向量协议和 链路状态协议都有很大区别。
UDP首部
首部很简单,只有8个字节,每个字段的长度都是2个字节,源端口,目的端口,长度(总长度),校验和
TCP首部
HTTP请求行首部
请求方法 URL 版本 \r\n
状态行首部
协议 状态码 [原因短语] \r\n
原因短语 是200的时候没有,是其他的时候应该有。