由网卡发送数据通过网线进行发送,当网卡接收到信号以后将数据传给内核数据区,然后由操作系统交给相应的进程。
将数据进行发送的时候需要借助于网线实现,这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大,当多个机器需要交流的时候就使用集线器多个点连接(星型),但是数据不能隔离会出现a给b的数据会发给每一个点数据就非常多,所以使用网桥隔离一片区域,使得数据不要发送超出这样的一片区域。后来使用更高级的硬件设备:交换机:网桥+集线器
当然当进行长距离的数据传输的时候,还需要借助于路由器进行转发。
网络协议为什么要分层是因为需要规定每个步骤的条件和要求,可以更好的提高效率!每一层只需要关注自己的事情,应用层只需要知道自己是借助于qq发送一个文本信息,对面的应用层也是知道自己的qq发来了一个文本信息。
用户不能进到服务器中,用户端发送请求,服务器端在相应的ip端口监听接收请求分析请求并且返回相应的信息。
采用多层的方式,例如说是在网络层添加相应的ip头部,路由器每到一个节点就会拆来查看相应的IP地址内容,因为ip地址是按照地区进行划分的,会大致向目的地发。
传输层以及上面的层是端到端的层次就是在逻辑上从这个用户到另外一个用户,只需要在一端进行解析,然后再另外一端进行解析,中间部分都是不会解析的当作01数据。
unix系统底层默认实现tcp/ip实现,cc++程序员主要是关注应用层的协议。
应用层:http,dns,ftp,smtp 传输层:tcp,udp 网络层:ip
应用层可以自定义新协议,只要保证交流的两端进行数据的交流按照自己认同的方式进行交流就可以。c++程序员有一定的概率会自己写自己的协议。
网络就是获取资源:
资源在哪个地方:URL 资源怎么在网络中进行传输: HTTP 论文的格式:HTML
URL也就是一般说的网址链接。域名-----》ip,如果没有找到响应的的域名对应的ip就找dns的服务器解析。
域名只是和ip对应,但是不包含端口号。
在发送信息的时候将论文以HTML形式发送,通过http协议包装进行发送。其中包括http协议:
请求行,请求头(消息头),空行,正文。
用户发送http请求信息(其实主要是看头部的信息),服务器发送http响应信息
https常用的端口是443端口,http端口是80端口。有时候可能是指明的那就找指明的端口服务。
请求行包含的内容:请求方式, 请求资源, 请求协议
请求方式:主要有GET和POST两种方式,大多数请求是GET,GET常用于获取数据,POST是用于服务器提交数据
还有其他的请求方法,有很多细分的标准方式,但大多都是用get和post涵盖。
服务器不管是谁发的,只看发来的数据是否是符合协议标准。
get请求一般把参数放在资源路径之后,post请求放在请求正文中
语法也可以get参数放在正文,post请求放在路径之后,不符合常理。
所以说登录密码等等都是通过post请求
确定是get还是post请求就是看如果是获取数据就是get,如果是提交数据就是post。一般都是既会提交数据又要获取数据,这个时候就是哪个是主要的点。
一般时候都是获取信息,但是当收藏文章或者放购物车的时候是提交信息。
请求资源中的路径只是一个标记,并不是在目标服务器真的有这样的一个目录。
请求协议
http1.1和http1.0 :http1.1链接以后不要断开,等多次的信息发送完以后才断开,如果是在短时间内频繁发送多次请求性能更好。
在进行发送数据以前需要先进行三次握手和四次挥手使得在链接以前进行握手确认,进行四次挥手确认断开链接。
请求头的信息是客户端给服务器看的。
accept: 大类型/小类型:vedio/mp4 text/txt 权重 q=...
采用直接输入网址发起http请求没有reffer,通过在一个网站中进行跳转到另外一个网页这个时候会携带reffer带的就是原来网页的路径。
http协议是非常灵活的但是tcp,udp不灵活。http中可以有不合实际的信息。
访问一个网站首先是先返回一个html代码,解析代码发现有图片然后就去发起请求然后拿图片以及图片的相关的信息,如果刷新的时候将图片的相关信息发送过去,如果图片的信息没有改变,就不会再返回图片,而是要求用户端从内存中加载。
cookie是一个机器的标识,IP会变化但是cookie发送给服务器的时候,服务器就知道是你。
post用于指向要访问的目标服务器上的虚拟主机,虽然不同的域名指向相同的ip但还有post可以指明在同一个服务器上的不同虚拟主机。
响应信息和请求信息格式差不多。
响应行最重要的状态码:例如http协议404响应报文的状态段。状态码分为五个段,几百段就是几开头,每个段都有自己的功能。200段表示正常访问,300表示我没有资源但我知道资源在哪,400段状态码表示没有这个资源但服务器是在的。500段(505,507)服务器内部出现错误,一定代码有问题。
因为http协议可以自己写所以可能会出现很多自己不认识的字段。
抓包
抓包可以确定是发送端接收还是接收端抓包有问题,参数对不对,信息对不对等等。
通过分析http一个请求,获取关键信息就叫做抓包
首先检查URL 协议http, 资源路径,参数
请求方式:GET or POST
看看有没有响应,响应状态码参数,响应是不是相关的数据,头部信息一般意义不大
这些如果没有问题很可能是自己的代码有问题。
https:相比于http更安全,因为https是加密的,所以说抓包也是看不懂的。
证书,对称加密,非对称加密。
买证书可以去相应的服务器验证是否安全;对称加密:知道怎么加密就知道怎么解密;
非对称加密:公钥-》加密-》密文,密文-》私钥-》明文。这个过程是不可逆的,所以说即使获得公钥也不能解密。
往往对称加密的效率比较高,所以说一般也是用对称加密来实现。
服务器在现实中几乎没有发起请求的,需要服务器提供数据就是用GET请求
传输层:主要讨论tcp和udp这两个协议
相较于应用层会学习以及自己也可以定义属于自己的协议,但是传输层学习的协议是比较少的,主要是tcp和udp。传输层的头部(固定部分20字节)每个位都有准确的定义,不能随意。
在发送信息的时候是在传输层+端口,在IP层+ip
结合上面的信息,http是在传输层是借助于tcp协议的,这就是在传输的时候需要先进行三次握手,完成以后需要进行四次挥手(前两次挥手表示客户与服务器断开连接,后两次表示服务器与客户端断开链接)。
tcp连接是一个可靠的面向连接的全双工的连接
可靠:三四握手挥手,每次发送信息都有确认信息(可能是累计确认),超时重传快速重传。
确认:可能不会每一个都确认是累计确认,接收窗口中没有按照顺序到达对于中断未到的一段进行反复请求当请求到三次的时候就进行重发。
udp是一个不可靠的连接,是直接放到网络,效率比较高,现在的正确传输率在90%以上。
传输层在理论上是端到端的,但是在现实中并不是端到端的(比较复杂)。
当确认位ACK为0的时候ack确认号是没有意义的。
注意数据比较大的时候,会进行切片发送,并且不是会对于每一片都确认,会进行累计确认的方式,放到缓冲区中。在窗口中收集到了足够的数据的时候,就向上传送。
往往在进行tcp传输的时候,不常用到超时重传但是会用到累计快速重传的方式。因为当一直没有收到其中中断的一段的时候,就不断请求该段,当请求超过三次的时候,就重发。
在客户端和服务器端使用2msl,就是会等待可能出现收不到的情况。谁先挥手谁先等timewait时间
udp并不会在传输层进行切片,因为不能进行拼接,所以最终的切片任务交给网络层。
重要的内容:
请求信息包含四个部分:请求行, 请求头,空行, 正文
请求行:请求方式,请求资源, 请求协议
抓包, 关注重点 , URL域名(ip+端口)看是否发对地方,协议(是否使用正确的协议)
查看状态码,如果500段那么是服务器代码出现问题。查看返回值。