TCP/IP
- TCP/IP协议族里最重要的一点就是分层,TCP/IP分为四层:应用层、传输层、网络层、数据链路层。
- 应用层决定了向用户提供应用服务时通信的活动。HTTP协议、FTP、DNS
- 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。TCP(传输控制协议)、UDP(用户数据报协议)
- 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位,该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传送给对方。IP
-
链路层用来处理连接网络的硬件部分。包括控制系统、硬件的设备驱动、NIC、光纤等物理可见部分。
Alt text
- IP协议的作用是把各种数据包传送给对方,而要保证确实传送到对方则需要满足IP地址和MAC地址的匹配。
- IP地址指明了节点被分配到的地址。
- MAC地址是指网卡所属的固定地址。
- IP地址可以和MAC地址进行配对。
-
TCP提供可靠的字节流服务,字节流服务是指为了方便传输将大块数据分割成以报文段为单位的数据包进行管理。为了准确将数据无误地传送到达目标处,TCP协议采用了三次握手策略。分别是请求连接、响应、开始传输。
Alt text - url全称是Uniform Resourse Location。
- 利用缓存代理服务器可以避免多次从源服务器转发资源,当客户端发送相同请求时缓存代理服务器可直接发送缓存的资源,避免请求源服务器。
HTTP报文
- HTTP是一种无状态协议,不保留之前一切的请求或报文的信息。
- Cookie会根据从服务端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文上加上Cookie值后发送。
- 为了传输大容量数据会将数据分成多个块(chunk),每一块都会用十六进制来标记块的大小,而实体主题的最后一块会使用“0(CR+LF)"来标记。
HTTP状态码
- 状态码类别
- 1xx:信息性状态码:接受的请求正在处理
- 2xx:成功状态码:请求正常处理完毕
- 3xx:重定向状态码:需要进行附加操作以完成请求
- 4xx:客户端错误状态码:服务器无法处理请求
- 5xx:服务器错误状态码:服务器处理请求出错
- 当301、302、303相应状态码返回时,几乎所有的浏览器都会把POST改为GET,并删除请求报文内的主体,之后请求会自动再次发送。
- 304状态码是当客户端发送附带条件请求时服务器端允许请求访问资源,但因发生请求未满足条件的情况后直接返回304 Not Modified。返回时不包含任何响应的主体部分。
- 使用Wireshark可以获取HPPT协议的请求和响应内容,并对其进行解析。
HTTPS
- 通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。SSL全称Secure Socket Layer 安全套接层。采用SSL后,HTTP就拥有了HTTPS的加密、证书、和完整性保护这些功能。
- SSL采用公开密钥加密,加密算法是公开的,而密钥是保密的,加密和解密都需要用到密钥。
- 公开密钥加密的方式很好地解决了共享密钥加密的困难。公开密钥使用一对非对称的密钥,一把叫做私有密钥一把叫做公开密钥。使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方法,不需要发送用来解密的私有密钥,也不用担心密钥被攻击者窃听而盗走。解密只能够用私有密钥解密,解密过程是在对离散对数进行求值,只有共有密钥是不行的。
-
数字证书是为了证明给客户端收到的公开密钥是正确的。服务器会将这份公钥证书发送给客户端以进行公开密钥加密方式通信。多数浏览器会在内部植入常用认证机关的公开密钥,以便客户端进行验证。
Alt text
Alt text
webSocket
- webSocket是建立在http基础上的全双工通信标准,一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可以互相发送JSON、XML、HTML或图片等任意格式的数据。
- 为了实现WebSocket通信,需要用到http的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手的目的。
- 对于WebSocket的请求返回状态码101 Switching Protocols的响应。
UDP与TCP
-
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。TCP是面向连接的,有比较高的可靠性。TCP连接一旦建立,所有的会话都基于连接完成,如果客户端要与另一个TCP服务通信,需要另创建一个套接字来完成连接。
-
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。UDP中一个套接字可以与多个UDP服务通信,在网络差的情况下会产生丢包问题,常用于视频音频等传输。
网友评论