计算机网络复习要点

HTTP协议

特性

  • HTTP协议构建于TCP/IP协议之上,默认端口号80
  • HTTP 是无连接无状态的

请求报文

请求分三个部分:
1. 状态行
2. 请求头
3. 消息体

交互方法

基本方法共4个
1. GET 查
用于获取信息,应该是安全的和幂等的。
2. POST 增
表示修改服务器上的资源请求
3. PUT 改
4. DELETE 删
注意:
* GET请求可提交的数据量受到URL长度的限制,这个限制是特定的浏览器和服务器对它的限制。
* 理论上POST是没有大小限制,但是服务器软件在实现时会做一定的限制
* GET数据在URL中,POST数据在HTTP包的包体里

响应报文

构成:
1. 状态行

状态行由协议版本号,状态码,响应的状态描述构成

  1. 响应头
  2. 响应正文

状态码:
* 1xx消息-请求已被接收,继续处理
* 2xx成功-请求已被接收、理解、接受
* 3xx重定向-需要后续操作才能完成这一请求
* 4xx请求错误-请求含有词法错误或者无法被执行
* 5xx服务器错误-服务器在处理某个正确请求时发生错误
常见状态码:
* 200 ok 请求成功
* 301 Moved Permanently 请求永久重定向
* 302 Moved Temporarily 请求临时重定向
* 304 Not Modified 文件未修改,可以直接使用缓存文件。
* 400 Bad Request 客户端请求有语法错误
* 401 Unauthorized 请求未经授权
* 403 Forbidden 拒绝提供服务
* 404 Not Found 请求资源不存在
* 500 Internal Serval Error 服务器发生不可预期的错误
* 503 Service Unavailable 服务器暂时不可用

条件GET

使用时机

客户端已经访问过某网站,并打算再次访问该网站。

用法

客户端向服务端发送一个包询问是否在上一次访问后网站是否更改了页面,如果网站没有更改页面则返回304状态码,客户端只需要使用缓存即可。如果网站已经更改则返回更改的页面。

持久链接(Keep-Alive)

  • 使用非Keep-Alive模式时每个请求/都需要建立一个新链接,完成之后立即断开;当使用 Keep-Alive 模式时候,链接可以重用。
  • HTTP 1.0 官方标准没有规定Keep-Alive如何工作,如果客户端支持Keep-Alive需要在HTTP请求头中添加一个Connection:Keep-Alive字段。当服务器受到请求后会在响应头中同样添加一个Connection:Keep-Alive字段。
  • HTTP 1.1 默认所有链接都保持,加入Connection:close才关闭。目前大部分浏览器都使用HTTP 1.1协议
  • HTTP Keep-Alive 是保持当前的TCP链接,避免重新建立链接。
  • 长链接不是一直保持,例如:Keep-Alive:timeout=5, max = 100, 表示这个链接可以保持5秒,最多接收100次请求就断开。
  • HTTP是一个无状态协议,每个请求都是独立的,Keep-Alive没能改变这个结果。Keep-Alive 也不能保证客户端和服务端的链接一定是活跃的,唯一能做的是当链接关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持链接性。
  • 客户端、服务端如何知道本次传输结束:

    1. 判断数据是否达到Content-Length指示的大小
    2. 对于耗时的操作可以采用分块传输的模式,每产生一个数据块就发送一个数据块,只要请求头的信息含有Transfer-Encoding:chunked 字段,则表明回应将有数量未定的数据块组成,发送一个大小为0的块则表示本次回应完成。
      例子:
      HTTP/1.1 200 OK
      Content-Type: text/plain
      Transfer-Encoding: chunked
      
      25
      This is the data in the first chunk
      
      1C
      and this is the second one
      
      3
      con
      
      8
      sequence
      
      0

    HTTP Pipelining(HTTP 管线化)

    • 默认情况下HTTP协议每个传输层只能承载一个HTTP请求和响应,浏览器在收到上一个响应后再发送下一个请求,在使用持久链接的情况下,某个连接上的消息传递过程请求1 -> 响应1 -> 请求2 -> 响应2
    • HTTP管线化是将多个HTTP请求成批的提交的技术, 在传送的过程中不需要等待服务端的响应. 连接上的消息变成了:请求1 -> 请求2 -> 响应1 -> 响应2
    • 管线化通过持久链接完成,仅HTTP/1.1支持此技术
    • 只有GET和HEAD请求支持, POST有所限制
    • 初次建立连接由于不知道对方服务器是否支持HTTP/1.1, 不应启动管线化.
    • 不要求服务器端对响应进行管线化处理
    • 目前服务器端程序对管线化支持不友好, 所以Chrome,Firefox默认未开启管线化.

会话跟踪

是指对同一个用户对服务器的连续请求和接受响应的监视

需要会话跟踪的原因

HTTP协议是无状态的协议,他不能保存客户的信息, 一次响应完成之后连接就断开了,下一次的请求需要重新连接,这就需要判断是否是同一个用户.

会话跟踪常用方法:

  1. URL重写, 在URL结尾添加一个附加数据以标识该会话, 把会话ID通过URL的信息传递过去, 以便服务器端进行识别
  2. 隐藏表单域
    将会话ID添加到HTML的表单元素中提交到服务器, 此表单元素并不在客户端显示.
  3. Cookie
    Cookie是Web服务端发送给客户端的一小段信息, 客户端请求时可以读取该信息发送到服务器端, 进而进行用户的识别. 服务器可以设置或者读取Cookie中的信息来维护用户跟服务器之间的状态. Cookie有两种:
  4. 内存Cookie
    浏览器关闭后就消失, 存在时时间短
  5. 硬盘Cookie
    存储在硬盘中, 存在时间长, 除非用户手工清理或者到了过期时间, 否则不会被删除.
    按存在时间可分为:持久Cookie和非持久Cookie Cookie可以被禁止.

Session

服务区端会对每一个用户创建一个session, session中可以存放信息, 服务器端会产生一个sessionID来标识这个session对象, 然后将这个sessionID放入到Cookie中发送到客户端, 下次访问时, seesionID会发送到服务器, 在服务器端进行识别不同的用户. Session的实现依赖于Cookie, 如果Cookie被禁用, 那么session也将失效.


TCP

  • TCP提供一种面向连接的, 可靠的字节流服务
  • 在一个TCP连接中只有两方进行彼此通信. 广播和多播不可用
  • TCP使用校验和, 确认和重传机制来保证可靠的传输
  • TCP给数据分节进行排序, 并使用累积确认保证数据的顺序不变
  • TCP使用滑动窗口机制来实现流量的控制, 通过动态改变窗口的大小进行拥塞控制.
  • TCP并不能保证数据一定会被对方接收到, TCP能做到的是如果有可能就把数据递送到接收方, 否则就通知用户(通过放弃重传并且中断链接这一手段), 因此准确说TCP也不是100%可靠的协议,它所能提供的是数据的可靠递送或者故障的可靠通知.

三次握手, 四次挥手.

目的:连接服务器制定端口, 建立TCP连接, 并同步连接双方的序列号和确认号.

  • 第一次握手(SYN=1,seq=x)
    客户端发送一个SYN标志位置1的包, 指定客户端打算连接的服务器的端口, 以及初始序号x,保存在包头的序列号字段中(Sequence Number)客户端进入SYN_SENT状态
  • 第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1)
    服务器发回确认包(ACK)应答. 即SYN标志和ACK标志均为1. 服务器端选择自己的序号放入seq中, 并将确认序号设为客户端发送过来的序号x加1, 发送完毕服务器进入SYN-RECEIVED状态.
  • 第三次握手(ACK=1, ACKnum = y + 1)
    客户端收到服务器端确认包后发送确认包(ACK), SYN标志位0, ACK标志为1, 并把服务器发送过来的ACK的序号字段+1,放在确认字段中发送给对方.
    发送完毕后, 客户端进入ESTABLISHED状态, 当服务器接收到这个包时,也进入ESTABLISHED状态, TCP握手结束.

四次挥手

服务器端和客户端都可以主动发起挥手动作
* 第一次挥手(FIN = 1, seq = x)
假设客户端想要关闭连接, 客户端发送一个FIN标志位置1的包, 表示自己已经没有数据可以发送了, 但是仍然可以接受数据, 发送完毕后客户端进入FIN_WAIT_1状态.
* 第二次挥手(ACK = 1 ACKnm = x + 1)
服务器端接收到客户端的FIN包后,发送一个确认包, ACK置1, 确认包序号为客户端FIN包的序号加1. 表明自己接受到了客户端关闭连接的请求, 但是还没有准备好关闭连接.
发送完毕后, 服务端进入CLOSE_WAIT状态, 客户端接收到这个确认包后进入FIN_WAIT_2状态, 等待服务器端关闭连接
* 第三次挥手(FIN = 1 seq = y)
服务器端准备好关闭连接后, 向客户端发送结束连接的请求, FIN置1, 选一个序列号放入seq, 发送完毕后服务器端等待来自客户端的最后一个ACK
* 第四次挥手(ACK=1, ACKnum = y + 1)
客户端接收到来自服务器端的关闭请求后, 发送一个确认包, ACK置1, 序列号为接收到的服务器FIN包的序列号+1, 并进入到TIME_WAIT状态, 等待可能出现要求重传的ACK包. 客户端等待某个固定时间(两个最大段生命周期,2 Maximum Segment Lifetime)之后, 没有收到服务器端的ACK则认为服务器端已经正常关闭连接, 于是自己也关闭连接, 进入CLOSED状态.


UDP

特点
* UDP缺乏可靠性, 本身不提供确认, 序列号,超时重传等机制. UDP数据报可能在网络中被复制, 被重新排序. UDP不保证数据报达到最终目的地, 也不保证各个数据报的先后顺序, 也不保证每个数据报只到达一次.
* UDP数据报是有长度的,而TCP是一个字节流协议, 没有任何记录边界.
* UDP是无连接的
* UDP支持多播和广播


IP协议

IP协议位于TCP/IP协议的第三层–网络层. 与传输协议相比, 网络层的责任是提供点到点的服务, 而传输层(TCP/UDP)则提供端到端的服务.

IP地址分类

IP地址b包含两个标识码, 即网络ID和主机ID
IP地址根据网络ID的不同分为5类
1. A类地址
A类地址由1个字节的网络地址和3个字节的主机地址组成, 网络地址最高位必须是0, 地址范围从1.0.0.0到126.0.0.0, 可用的A类网络有126个, 每个网络能容纳1677214个主机,ip范围为:1.0.0.1 - 126.255.255.254
2. B类地址
网络地址16位, 主机地址16位, 网络地址前2位必须为10, 范围为128.1.0.1-191.255.255.254 网络共有16382(2^14 - 2)个 主机有65534(2^14 - 2)个
A类地址第一组数字为1-126, 0 和127 不作为A类地址, 数字127保留给内部回送函数, 而数字0则表示该地址是本地宿主机, 不能传送.
3. C类地址
网络24位, 主机8位, 网络前3位为110, 共有254(2^8 - 2)个主机
4. D类地址
用于多点广播前4位为1110
5. E类地址
地址保留,前4位为1111

全0地址0.0.0.0对应于当前主机, 全1地址255.255.255.255是当前子网的广播地址.
B类第一组数字128-191
C类第一组数字192-223


Socket基本概念

Socket是对TCP/IP协议族的一种封装, 是应用层与TCP/IP协议族通信的中间软件抽象层. Socket还可以认为是网络间不同计算机上的进程通信的一种方法, 利用三元组(ip地址, 协议, 端口)就可以唯一标识网络中的进程, 网络中的进程通信可以利用这个标志与其它进程进行交互.


HTTPS 超文本传输安全协议

是一种通过计算机网络进行安全通信的传输协议, HTTPS经由HTTP进行通信, 但是利用 SSL/TLS来加密数据包
* 默认端口 443
* HTTP协议和安全协议同属于应用层, 具体来讲是安全协议工作于HTTP之下, 传输层之上: 安全协议(SSL/TLS)向HTTP提供一个类似于TCP的套接字, 供进程向其注入报文, 安全协议将报文加密并注入运输层套接字; 或是从运输层获取加密报文, 解密后交给对应的进程.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值