当前位置:   article > 正文

网络是怎样连接的_网络怎么连接

网络怎么连接

《网络是怎样连接的》读书笔记

1浏览器生成消息

1.1生成HTTP请求消息

浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要不同的URL判断应该使用其中哪种功能来访问相应的数据:http、ftp。

HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,客户端请求消息包含两部分:对什么?(URL)、进行怎样的操作?(方法)。服务端回应的响应消息:状态码+头字段+网页数据。协议格式:

在这里插入图片描述
状态码:1xx:告知请求的处理进度、情况。2xx:成功。3xx:需要进一步操作。4xx:客服端错误。5xx:服务端错误。

1条请求消息中只能写1个URI。如果需要获取多个文件(如图片),必须对每个文件单独发送1条请求。

1.2向DNS服务器查询Web服务器的IP地址

网络设备的地址:网络号+主机号10.11.12.13/255.255.255.0 = 10.11.12.13/24。子网掩码确定内部结构。

浏览器使用Socket库(OS提供,用于调用网络功能)中的解析器(它又委托OS内部的协议栈(TCP/IP驱动))根据域名查询IP。

1.3全世界DNS服务器的大接力

weread.qq.com 查询过程:客户端首先会访问最近的一台DNS服务器(客户端的TCP/IP设置中填写的DNS服务器IP),若无,则从顶层往下查找,根域DNS服务器有没有? -> com有没有? -> qq有没有? -> weread(目标DNS)。

实际上DNS有缓存功能,可记住查过的域名,直接返回信息,不需要一级级查。

1.4委托协议栈发送消息

socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。在Unix一切皆文件哲学的思想下,socket是一种打开—读/写—关闭模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

使用Socket库收发数据:

  1. 创建套接字(创建套接字阶段)
  2. 将管道连接到服务器端的套接字上(连接阶段)
  3. 收发数据(通信阶段)
  4. 断开管道并删除套接字(断开阶段)

在这里插入图片描述

描述符:应用程序用来识别套接字(可能同时建立多个)的机制。IP地址和端口号:客户端和服务器之间用来识别对方套接字的机制。

2电信号传输TCP/IP——探索协议栈和网卡

2.1创建套接字

存放控制信息(通信对象的IP地址、端口号、通信操作的进行状态)的内存空间就是套接字的实体。协议栈根据套接字中记录的控制信息来工作。netstat命令显示套接字内容,一行相当于一个套接字(也可以说客户端服务端各一个):

>netstat -ano
协议  本地地址                外部地址                 状态            PID
TCP  0.0.0.0:49668          0.0.0.0:0              LISTENING       780
TCP  10.102.230.90:64557    117.184.248.63:443     ESTABLISHED     2356
TCP  10.102.230.90:49451    8.8.4.4:443            SYN_SENT        2356
UDP  0.0.0.0:500            *:*                                    3580
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

2.2连接服务器

我们需要把服务器的IP地址和端口号等信息告知协议栈,需要让客户端向服务器告知必要的信息(通信请求)等等,所以连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息(IP,port)并准备数据收发。此外还需要分配一块临时收发数据的缓冲区。

连接实际过程:三报文握手/三次握手(three way handshake)。同步位SYN,确认位ACK。

序号seq:发送方告知接收方,本报文段所发送的数据的第一个字节的序号。

确认号ack:期望收到对方下一个报文段的第一个数据字节的序号。(ack=N,则到seq=N-1的所有数据都已正确收到)

在这里插入图片描述

2.3收发数据

协议栈收到数据,发出时的判断要素:每个网络包能容纳的数据长度(收到的数据长度超过或者接近MSS时再发送。避免发送大量小包,提高网络效率)、时间(协议栈的内部有一个计时器,经某一间隔必须发送。降低网络延迟)。按需权衡两矛盾的要素。

通过序号确认号可以确认接收方是否收到了网络包。如果对方没有返回某些包对应的确认号,就重传。有了这一机制,我们就不需要在其他地方(数据链路层、物理层)对错误进行补救(检测到错误直接丢弃)了。但要根据网络包平均往返时间调整确认号等待时间(超时重传),以既不造成网络拥塞(大量多余的重传)又不使网速变慢(等待过长,重传延迟)。

发一个包就等一个确认号太浪费时间,所以使用滑动窗口:在发送一个包之后,不等待确认号返回,而是直接发送后续的一系列包。但发送包的频率可能超过接收方处理能力(造成接收缓冲区溢出),所以接收方需要告诉发送方自己最多能接收多少数据(窗口大小)。

2.4从服务器断开并删除套接字

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/712157
推荐阅读
相关标签
  

闽ICP备14008679号