利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统;
1.局域网 LAN;(作用范围一般为几米到几十公里)
2.城域网 MAN;(界于WAN与LAN之间)
3.广域网 WAN;(作用范围一般为几十到几千公里)
1.诞生阶段,单个计算机为中心的远程联机系统;
2.ARPANET,多个主机通过通信线路互联起来;
3.开放性的标准化体系结构,OSI诞生;
4.Intentnet互联网;
Transmission Control Protocol / Internet Protocol的简写,传输控制协议/因特网互联协议,是Internet最基本的协议,Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成;协议采用了4层的层级结构;它是利用IP进行通信时所必须用到的协议群的统称;
TCP/IP概念层模型 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输、电子邮件、文件服务、虚拟终端 | TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telent |
传输层 | 提供端对端的接口 | TCP、UDP |
网络层 | 为数据包选择路由 | IP、ICMP、RIP、OSPE、BGP、IGMP |
链路层 | 传输有地址的帧以及错误检测功能 | SLTP、CSLIP、PPP、ARP、RARP、MTU |
TCP
面向连接的、可靠的流协议;
UDP
面向无连接的通讯协议;
IP
在源地址和目的地址之间传送的数据包;
ICMP
控制报文协议;
IGMP
internet组管理协议;
ARP
地址解析协议;
RARP
反向地址转化协议;
TCP
和UDP
都是传输层的协议,传输层主要为两台主机上的应用程序提供端到端的通信;
不同之处:TCP
提供了一种可靠的数据传输服务,TCP
是面向连接的,也就是说,利用TCP
通信的两台主机首先要经历一个建立连接的过程,等到连接建立后才开始传输数据,而且传输过程中采用“带重传的肯定确认”技术来实现传输的可靠性。TCP
还采用一种称为“滑动窗口”的方式进行流量控制,发送完成后还会关闭连接。所以TCP
要比UDP
可靠的多;
UDP
是把数据发出去后,不管对方是不是在接收,也不管对方是否能接收的了,也不需要接收方确认,属于不可靠的传输,可能会出现丢包现象;
我们常用的网络应用基本上都是基于TCP
和UDP
的,这两个协议又会使用网络层的IP
;但是我们完全可以绕开传输层的TCP
和UDP
,直接使用IP
,甚至直接访问链路层,比如tcpdump
程序就是直接和链路层进行通信的;
MAC地址
:全称叫做媒体访问控制地址,也称为局域网地址
、以太网地址
或物理地址
,由网络设备制造商生产时写入硬件内部。MAC地址与网络无关;
IP地址
:全称叫做互联网协议地址,为互联网上的每一个网络和每一台主机配置一个唯一的逻辑地址,与物理地址作区别;所以IP地址用来识别TCP/IP网络中互连的主机和路由器;
端口号
用来识别同一个计算机中进行通信的不同应用程序,因此也被称为程序地址;
TCP
是面向连接的通信协议,通过三次握手建立连接,然后才开始数据的读写,通讯完成时要拆除连接。
TCP
提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作;
所谓三次握手是指建立一个TCP
连接时需要客户端和服务端总共发送三个包以确认连接的建立;
第一次握手
客户端将标志位SYN置为1,随机产生一个seq = J,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认;
第二次握手
服务端接收到数据包后由标志位SYN =1 知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ack = J+1,随机产生一个值seq = K,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态;
第三次握手
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack = K+1,并将该数据包发送给服务端,服务端检查ack是否为k+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后客户端与服务端之间可以开始数据传输了;
TCP是可靠的传输控制协议,而三次握手是保证数据可靠传输又能提高传输效率的最小次数。
三次握手的过程是通信双方互相告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤;
如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号得不到确认;
如果是四次握手,很明显,三次握手后,通信的双方已经知道了对方序列号的起始值,也确认了对方知道自己序列号起始值,第四次没有必要了;
TCP三次握手是有一个缺陷的,如果我们利用三次握手的缺陷进行攻击,这个攻击就是SYN洪泛攻击。三次握手中有一个第二次握手,服务端向客户端应答请求,应答请求是需要客户端IP的,攻击者可以伪造这个IP,往服务端狂发第一次握手的内容,第一次握手中客户端IP地址是伪造的,从而服务端忙于进行第二次握手但第二次握手没有结果,导致服务器被拖累死机;
解决方案
使用防火墙,在确认了连接的有效性后,才向内部的服务端发起SYN请求;
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发;
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当甲方完成数据发送任务后,发送一个FIN给乙方来终止这一方向的连接,乙方收到一个FIN只是意味着不会收到甲方数据了,但是乙方还可以给甲方发送数据,直到乙方也发送了FIN给甲方。
第一次挥手
FIN_WAIT1
状态;第二次挥手
CLOSE_WAIT
状态,客户端处理FIN_WAIT2
状态;第三次挥手
LAST_ACK
状态,客户端处理TIME_WAIT
状态;第四次挥手
1.确保发送方发送的第四次挥手ACK报文可以到达接收方;
2.确保当前连接的所有报文都已经过期;
TCP是全双工模式,这就意味着,当客户端发出FIN报文段时,只是表示客户端已经没有数据要发送了,客户端告诉服务端,它的数据已经全部发送完毕;
但是,这个时候客户端还是可以接收来自服务端的数据,当服务端返回ACK报文段时,表示它已经知道客户端没有数据发送了,但服务端还是可以发送数据给客户端;当服务端也发送FIN报文段时,这个时候就表示服务端也没有数据要发送了,就会告诉客户端,我也没有数据要发送了,之后就中端此次TCP连接;