计算机网络知识整理

TCP/UDP

都属于TCP/IP运输层,是互联网的正式标准。用户数据报协议UDP和传输控制协议TCP。在协议栈中位于应用层和网络层(IP)之间
UDP用户数据报协议,再在IP的数据报服务上增加了一点很少的功能,就是复用和分用的功能以及差错检测功能。其主要特点有:

  1. UDP是无连接的,因此减少了开销和发送数据之前的时延
  2. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)
  3. UDP是面向报文的,发送方程序交下来的报文在传输层添加首部后就向下交付IP层(在这里添加IP首部),UDP对应用层交下来的报文即不合并也不拆分,而是保留这些报文的边界。但是若报文太长会在IP层进行分片,这会降低IP层的效率,所以需要应用程序选择合理大小的报文。
  4. UDP没有拥塞控制,所以比较适合一些需要恒定速率发送数据的场景,如IP电话,实时视频会议等,允许数据有一些丢失但不允许有太大的时延。
  5. UDP支持一对一、一对多、多对多、多对一的交互通信。
  6. UDP首部开销小,只有8字节:源端口、目的端口、长度和校验和(各占2字节)。
    UDP的检验和是把首部和数据部分一起都检验,IP数据报的检验和只检验IP数据报的首部。
    各种应用和应用层协议使用情况
    应用 应用层协议 运输层协议
    名字转换 DNS(域名系统) UDP
    文件传送 TFTP(简单文件传送协议) UDP
    路由选择协议 RIP(路由信息协议) UDP
    IP地址管理 DHCP(动态主机配置协议) UDP
    网络管理 SNMP(简单网络管理协议) UDP
    远程文件服务器 NFS(网络文件系统) UDP
    IP电话 专用协议 UDP
    流式多媒体通信 专用协议 UDP
    多播 IGMP(网际组管理协议) UDP
    电子邮件 SMTP(简单邮件传输协议) TCP
    远程终端接入 TELNET(远程终端协议) TCP
    万维网 HTTP(超文本传输协议) TCP
    文件传送 FTP(文件传输协议) TCP
    TCP不提供广播或者多播服务,由于在传输数据前要先建立连接,结束后释放连接,不可避免的增加了很多开销,如确认,流量控制,计时器以及连接管理等。
    TCP主要特点:
  7. 是面向连接的运输层协议
  8. 每一条TCP连接只能有两个端点
    TCP连接的端口叫做套接字(socket)或者插口,表示方法为点分十进制的IP地址后面写上端口号,中间用冒号或者逗号隔开。 套接字socket=(IP地址:端口号)
  9. TCP提供可靠交付的服务,提供全双工通信
    TCP连接传输的数据:无差错,不丢失,不重复,并且按序到达。TCP接收方和发送方两端都设有发送缓存和接收缓存发送时程序把数据传送给TCP的缓存后就可以做自己的事,TCP在合适的时候把数据发送出去,接收时一样,在合适的时候读取缓存中的数据。
  10. TCP是面向字节流的
    流(stream)指的是流入到进程或者从进程流出的字节序列。面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成一连串的无结构的字节流。

TCP/IP协议

流量控制
滑动窗口用于加速传输,比如发了一个seq=100的包,理应收到这个包的确认ack=101后再继续发下一个包,但有了滑动窗口,只要新包的seq与没有得到确认的最小seq之差小于滑动窗口大小,就可以继续发。
1.流量控制——滑动窗口
TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。
发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。
为什么要设置窗口?
我们可以把窗口理解为缓冲区(但是有些窗口和缓冲区又不太一样)。
如果没有这些“窗口”,那么TCP没发送一段数据后都必须等到接收端确认后才能发送下一段数据,这样做的话TCP传输的效率实在是太低了。
解决的办法就是在发送端等待确认的时候继续发送数据,假设发送到第X个数据段是收到接收端的确认信息,如果X在可接受的范围内那么这样做也是可接受的。这就是窗口(缓冲区)引入的缘由。
1.1 窗口
(1)接收端窗口 rwnd
接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。
(2) 拥塞窗口 cwnd (congestion window)
发送端缓冲区大小
(3)发送窗口swnd
发送窗口的上限值 = Min [rwnd, cwnd]
当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
1.2 滑动窗口
发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。还可发送 300 字节。

IP地址的合法性:
TCP报文的首部格式中确认号的计算;确认号是期望收到对方下一个报文段的第一个数据字节的序号。
序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。例如,假设源主机发送3个报文段,每个报文段有100字节数据,且第一个报文段的序列号是1000,那么接收到第一个报文段后,目的主机返回含确认号1100的报头。接收到第二个报文段(其序号为1100)后,目的主机返回确认号1200,接收到第三个报文段后,目的主机返回确认号1300。

三次握手和四次挥手

三次握手经历的状态
客户端:
close(连接前的关闭状态)->SYN-SENT(同步已发送,第一次握手后进入)-> ESTAB-LISHED(已建立连接,发出第三次握手后进入)
服务器:
close(连接前的关闭状态)->listen(监听状态,被动打开后进入)->SYN-RCVD(同步收到状态,发出第二次握手后进入)->ESTAB-LISHED(已建立连接,收到第三次握手后进入)
TCP四次挥手双方经历的状态
客户端:ESTABLISHED(建立状态)->FIN-WAIT-1(终止等待1,发出第一次挥手后进入)->FIN-WAIT-2(终止等待2,接收到第二次挥手后进入)->TIME-WAIT(接收第三次挥手后进入)->CLOSED(过了TIME-WAIT时间未收到重发消息后进入)
服务器端:ESTABLISHED->CLOSED-WAIT(接收到第一次挥手后进入)->LAST-ACK(发出第三次挥手后进入)->CLOSED(接收到第四次挥手后进入)
注意:四次挥手发送的信号量上,FIN始终为1,ack为上一次收到挥手信息的seq加1(比如收到seq=u的消息,我发送时的ack就为u+1,同时要附带一个ACK+1)
三次握手的信号量SYN也始终为1,ACK始终为1,ack为接收到的seq加一(seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号)

在这里插入图片描述
在这里插入图片描述

ip地址

127.0.0.1是本机回环测试地址,等价于localhost,可以访问本地站点

IP地址分网络号加主机号
ABC类IP地址分类,主要看第一位上的数
A类IP,因为最高位必须是0,所以其地址范围是1.0.0.1到126.0.0.0,第一字节是网络号
B类IP,因为最高位必须是10,所以其地址范围是128.0.0.0到191.255.255.255,第二字节是网络号
C类IP,因为最高位必须是110,所以其地址范围是192.0.0.0到223.255.255.255,第三字节是网络号
D类IP,因为最高位必须是1110,所以其地址范围是224.0.0.0到239.255.255.255,未划分网络号和主机号。

一个URL到页面的全过程

URI统一资源定位符,URI用字符串标识网上的某一资源,而URL是资源的地址
URL叫做统一资源定位符(就是网址),例如http://mail.163.com/index.html:统一资源定位符,全球性地址,用于定位网上的资源。
其中http://这个是协议,HTTP超文本传输协议,也就是网页在网上传输的协议
mail这个是服务器名,代表一个邮箱服务器
163.com这个是域名,用来定位网站的独一无二的名字
mail.163.com:这个是网站名,由服务器名+域名组成
/:这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录
index.html:这个是根目录下的默认网页.
DNS根服务器
DNS翻译域名是基于UDP协议(因为TCP协议的开销过大,一次UDP名字服务器交换可以短到两个包:一个查询包、一个响应包。一次TCP交换则至少包含9个包:三次握手初始化TCP会话、一个查询包、一个响应包以及四次分手的包交换。),所以受UDP包大小的限制
为了增加反应速度,网页访问的申请都是由一个数据包所完成的,而一个数据包的长度为256B字节,这就决定了一个数据包只能有13个块,这就从根本上限制了根域名服务器的数量,也就是说根域名服务器只能有13个。

好吧,我们结合DNS、TCP和HTTP来详细地说一下输入url到页面返回的全过程吧。
DNS万维网上一个存储域名和IP互相映射的一个分布式数据库。
找IP顺序,先看浏览器缓存,系统缓存,路由器缓存,都没有则向服务器查询,从上到下分别是根服务器(全球13台),顶级域名服务器,权限服务器,本地域名服务器

  1. 我们输入一个域名:www.baidu.com
    首先是解析域名找到主机ip,一般浏览器会缓存DNS一段时间,2到30分钟不等
  2. 浏览器查找浏览器缓存,如果有域名的IP地址则返回,如果没有继续查找;
    注意建立TCP连接只需要知道ip和端口号即可
  3. 系统查找系统缓存,如果有域名的IP地址则返回,如果没有继续查找;
  4. 路由器查找路由器缓存,如果有域名的IP地址则返回,如果没有继续查找;
  5. 本地域名服务器采用迭代查询,它先向一个根域名服务器查询;
    从根服务器开始递归搜索,根服务器->顶级域名服务器->权限域名服务器->本地域名服务器->IP地址
  6. 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址;
  7. 本地域名服务器向顶级域名服务器dns.com进行查询;
  8. 顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.baidu.com的IP地址;
  9. 本地域名服务器向权限域名服务器dns.baidu.com进行查询;
  10. 权限域名服务器dns.baidu.com告诉本地域名服务器,所查询的主机www.baidu.com的IP地址;
  11. 本地域名服务器最后把查询结果告诉主机;
  12. 主机浏览器获取到Web服务器的IP地址后,与服务器建立TCP连接;
  13. 浏览器所在的客户机向服务器发出连接请求报文;
  14. 服务器接收报文后,同意建立连接,向客户机发出确认报文;
  15. 客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;
  16. 此处客户机与服务器之间的TCP连接建立完成,开始通信;
  17. 浏览器发出取文件命令:GET;
  18. 服务器给出响应,将指定文件发送给浏览器;
  19. 浏览器释放TCP连接;
  20. 浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;
  21. 服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;
  22. 服务器数据传输完毕后,向客户机发送连接释放报文;
  23. 客户机接收到报文后,发出确认,然后等待一段时间后,释放TCP连接;
  24. 浏览器显示页面中所有文本。
    以上就是从输入url到页面返回的全部详细过程了。

HTTP状态码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值