计算机基础知识 - TCP/IP

Sep 22, 2016   #reviews  #tcp  #ip  #socket 

TCP/IP参考模型

四层结构:主机到网络层(物理层、数据链路层)网络层传输层和应用层(会话层、表示层、应用层)。与OSI参考模型相对应。

网络层:

是整个协议栈的核心,负责把分组发送到目标网络或主机。定义了IP协议。功能:路由,异构网互连,拥塞控制。

A类:1.0.0.0-126.0.0.0,共126个; B类:128.0.0.0-191.255.255.255; C类:192.0.0.0-223.255.255.255;

ARP(Address Resolution Protocol)表:IP到MAC的映射,通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行;发送的是广播包。

路由表:IP地址可达范围的一张表,相当于是网络里的地图,负责三层的数据转发;

MAC地址表:MAC地址和交换机接口的逻辑关系表,负责二层的数据转发。

传输层:

负责端到端的会话。定义了TCP(面向连接,可靠的)和UDP(无连接的,不可靠的)两类协议。

应用层:

面向不同的网络应用引入了不同的应用层协议。如FTP(文件传输协议),TELNET(虚拟终端协议),HTTP(超文本传送协议)是基于TCP的;SNMP(电子邮件传输协议),TFTP(简单文件传输协议),NNTP(网上新闻传输协议)是基于UDP的。

socket

网络中的进程间通信,使用ip地址(网络层) + 协议(传输层) + 端口(传输层)唯一标识一个进程。

每个TCP、UDP数据段中都包含源端口目标端口字段,Socket = IP地址+端口号,Socket pair = 客户IP+客户端口号+服务器IP+服务器端口号

socket本质是编程接口(API),即TCP/IP提供的网络开发接口。

套接字连接过程分为三个步骤:

  1. 服务器监听(服务器端处于等待连接的状态,实时监控网络状态)
  2. 客户端请求(客户端描述要连接的服务器套接字,向服务器发送请求)
  3. 连接确认(服务器接到连接请求,建立一个新线程,响应该请求)

tcp连接

三次握手 - 建立连接(使数据段的发送和接收同步)

  1. 客户端向服务器发送一个SYN J(同步标志位) (请求建立连接)
  2. 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 (确认收到请求)
  3. 客户端再向服务器发一个确认ACK K+1 (确认收到确认请求)

四次握手 - 释放连接

  1. 一端调用close主动关闭连接,发送一个FIN M;
  2. 另一端接收到FIN M,执行被动关闭。它的接收也作为文件结束符传递给应用进程。(FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据)
  3. 一段时间后,接收到文件结束符的应用进程调用close关闭它的socket。TCP也发送一个FIN N;
  4. 接收到这个FIN的源发送端TCP对它进行确认。

为什么建立连接是3次,释放连接是4次?

服务端在LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

滑动窗口协议(可靠性和流量控制)

窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”。

“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。

TCP协议包括发送端和接收端,分别对应发送缓冲区和接收缓冲区。发送窗口是发送缓存中一部分。

  1. 已发送并收到确认的数据(不在发送窗口和缓冲区内)
  2. 已发送但未收到确认的数据(位于发送窗口之中)
  3. 允许发送但尚未发送的数据(位于发送窗口之中)
  4. 发送窗口外发送缓冲区内暂时不允许发送的数据

每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送。

流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

拥塞控制,是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法是慢开始、拥塞控制;快重传、快恢复。

浏览器通信

同源策略(Same Origin Policy,SOP)是指浏览器请求的资源必须是同域名、同协议、同端口。不同源的客户端脚本(js,actionscript)在没有明确的授权的情况下不能读取对方的资源。

跨源资源(CrossOrigin Resources Sharing,CORS )是一种允许多种资源在一个web页面请求域之外的另一个域的资源的协议,是为了让AJAX能够跨域而生的。

内容安全策略(Content Security Policy,CSP)是一种白名单机制,限制网站中是否可以包含某来源的内容。

Oauth是一个关于授权的开放网络标准,相当于在客户端与服务器之间添加了一个授权层。

参考链接

  1. TCP/IP协议

  2. Socket通信简介

  3. TCP/IP四层模型

  4. tcp窗口滑动以及拥塞控制