Socket
每一个Socket都可以描述为:(协议,本地地址,本地端口)。
一个完整的socket有一个本地唯一的socket号,由操作系统分配。
socket是面向C/S模型设计的,针对客户和服务器提供不同的socket系统调用。
客户随机申请一个socket,系统为之分配一个socket号;服务器拥有全局公认的socket,任何客户都可以向它发出连接请求和信息请求。(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫,而需要拥有一个已知的对方的电话号码)
socket接口是TCP/IP网络的API,socket接口定义了许多函数或例程。
开发原理:
服务器端:使用ServerSocket监听指定的端口,端口随意指定(1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,建议使用大于1024的端口),等待客户连接请求。客户连接后,会话产生,在完成会话后,关闭连接。
客户端:使用socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话,会话完成后,关闭socket。客户端不必指定打开的端口,通常临时的动态分配一个1024以上的端口。
SOCKET socket ( int af, int type, int protocol );
第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
第二个参数指定要创建的socket类型,流套接字类型为SOCK_STREAM,数据报套接字类型为SOCK_DGRAM,原始套接字SOCK_RAW;
第三个参数指定应用程序所使用的通信协议。
该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描述符是一个整数类型的值,每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放着套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。
TCP/IP
TCP:Transmission Control Protocol,传输控制协议。TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议。
IP:Internet Protocol,网络之间互连的协议。它是能使连接到网上的所有计算机网络实现互相通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。IP协议给因特网上的每台计算机和其它设备都规定了一个唯一的IP地址。
TCP/IP 即 传输控制协议/网间协议,为广域网(WAN)设计的。它们是互联网协议集(InternetProtocolSuite)中的两个协议,不过由于大家对它们的熟悉,以至于用TCP/IP这个词代替了整个协议集。
在因特网协议族中,TCP层是位于IP层智商,应用层之下的运输层。不同主机的应用层之间经常需要可靠的,像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可考的包交换。
应用层向TCP层发送用于网间传输的、用八位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功接收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
↑ TCP的三次握手
三次握手协议:
(1) 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
(2) 服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
(3) 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,开始传送数据。
↑ TCP连接的终止
四次挥手协议:
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送;
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号;
(3) 服务器关闭客户端的连接,发送一个FIN给客户端;
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
UDP
UDP:User Datagram Protocol,数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,因此,当报文发送之后,是无法得知其是否安全完整到达的。在网络质量不好的环境下,UDP协议数据包丢失会比较严重。可是由于它不属于连接型协议,因而资源消耗少,处理速度快。所以,通常音频、视频和普通数据在传送时使用UDP较多,即使偶尔丢失一两个数据包,也不会对接受结果产生太大影响。QQ就是使用的UDP协议。
UDP报头由四个域组成,每个域占用2个字节:源端口号、目标端口号、数据报长度、校验值。
Telnet
Telnet,Teletype Network,该协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
NAT
NAT,Network Address Translation,网络地址转换,属于接入广域网技术,是一种将私有地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。NAT能解决IP地址不足的问题,还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
端口映射是NAT地址转换的一种,其功能就是把在公网的地址转翻译成私有地址,采用路由方式的ADSL宽带路由器拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网。
OSI
OSI:Open System Interconnect,开放式系统互连。OSI模型把网络通信的工作分为7层,分别是:
物理层:
主要功能:为数据端设备提供传送数据的通路;传输数据;物理层的管理工作。
主要设备:中继器,集线器。
数据链路层:
主要功能:为网络层提供数据传送服务;链路连接的建立、拆除、分离;帧定界和帧同步;帧的发放顺序控制;差错检测和恢复。
主要设备:二层交换机、网桥。
网络层:
主要功能:为建立网络连接和为上层提供服务。包括:路由选择和中继;激活、终止网络连接;在一条数据链路上复用多条网络连接;差错检测与恢复等。
主要设备:路由器。
传输层:
会话层:
表示层:
应用层:
ping
ping,Packet Internet Grope,因特网包探索器,DOS命令,用于测试网络连接量的程序。
ping的工作流程:
有A、B、C、D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1
ICMP
ICMP,Internet Control Message Protocol,Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通常与否、主机是否可到达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数句,但是对于用户数据的传递起着重要的作用。
ICMP协议对于网络安全具有极其重要的意义,其本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。
比如,利用操作系统规定的ICMP数据包最大尺寸不超过64KB的规定,向主机发起“Ping of Death”攻击,即ICMP数据包的尺寸超过64KB上限时,主机会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。
此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。