1. 基本概念基础知识
- 互联网的一大特征:包都是以相同的方式传输的。
- 互联网中除了以太网线连接之外,还会使用比较古老的电话技术和最新的光通信技术。
- 浏览器不光只有web服务这一个功能,它也可以用来在FTP服务器上下载和上传文件,同时也具备了电子邮件客户端的功能。
- 浏览器是一个具有多种客户端功能的综合性客户端软件。
- web 80 mail 25
- URI 统一资源标识符 URL:解析确定服务器和文件名,再生成HTTP请求消息。
- IP地址的主机号:全零:表示整个子网,全1:表示子网上所有设备发送包,即广播。
- DNS 包含在操作系统的socket库中。
- socket库是由于调用网络功能的程序组件集合。
- DNS服务器会从域名与IP地址对应用表中产找自己的记录并返回IP地址。
2. OSI 七层模型及每层的功能
1、国际标准化组织ISO在1979年建立了一个分委员会来专门研究一种用于开放系统的体系结构,提出了开放系统互连OSI模型,这是一个定义连接异种计算机的标准主体结构。
2、OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
3、OSI参考模型的特性:是一种异构系统互连的分层结构;提供了控制互连系统交互规则的标准骨架;定义一种抽象结构,而并非具体实现的描述;不同系统中相同层的实体为同等层实体;同等层实体之间通信由该层的协议管理;相信层间的接口定义了原语操作和低层向上层提供的服务;所提供的公共服务是面向连接的或无连接的数据服务;直接的数据传送仅在最低层实现;每层完成所定义的功能,修改本层的功能并不影响其他层。
4、物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。
5、数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。
6、网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。
7、传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。
8、会话层:提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式 。
9、表示层:代表应用进程协商数据表示;完成数据转换、格式化和文本压缩。
10、应用层:提供OSI用户服务,例如事务处理程序、文件传送协议和网络管理等。
3 TCP/IP
1. TCP/IP 模型
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model)。这一网络协议共分为四层:网络访问层、互联网层、传输层和应用层
-
网络接口层
-
网络层
负责相邻计算机之间的通信。其功能包括三方面。
(1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
(2)处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
(3)处理路径、流控、拥塞等问题。
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。
IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。
ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。 -
传输层
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。 -
应用层
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。
FTP(File Transfer Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。
NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80。 -
总结
6. 主要特点
(1)TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准,即使不考虑Internet,TCP/IP协议也获得了广泛的支持。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
(2)TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
(3)统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址
(4)标准化的高层协议,可以提供多种可靠的用户服务。
2 TCP
- TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
- TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
- 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
- TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
- 面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
- 控制标志
- URG:紧急(The urgent pointer) 标志有效。紧急标志置位,
- ACK:确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
- PSH:该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
- RST:复位标志复位标志有效。用于复位相应的TCP连接。
- SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
- FIN:结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。
- TCP的可靠性
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能。保证保证数据能从一端传到另一端。
3. TCP三次握手
- 三次握手(three times handshake;three-way handshake)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。
为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。 - 三次握手:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
4 TCP 关闭TCP连接:改进的三次握手四步
对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
5 UDP
- UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
- UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
- UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
- 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
6 ICMP
ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。
ping 使用的ICMP协议;
7 TCP和UDP的区别
- TCP是传输控制协议,提供的是面向连接,可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间机那里一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
- UDP使用户数据报协议,是一个简单的面向数报的传输写,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不保证它们能到达目的地;由于UDP在传输数据报前不用再客户与服务器之间建立一个连接,且没有超时重发机制,故而传输速度很快。
8 如何编写socket套接字
- 服务器端
- 调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
- 调用accept();监听连接请求,则接受连接,返回通信套接字;
- 调用socket类的getOutStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。;
- 关闭通信套接字socket.close();
- 客户端
- 调用Socket()创建一个流套接字,并连接到服务器;
- 调用socket类的getOutputStream和getInputStream获取输出流和输入流。
- 关闭通信套接字;
9 ping 原理;
ping.exe的原理是,向指定的IP地址发送一定长度的数据包,按照约定,若指定IP地址存在的话,会返回同样大小的数据包,当然,若在特定的时间内没有返回,就是“超时”,就认为指定的IP地址不存在。由于ping使用的是ICMP协议,有些防火墙软件会屏蔽ICMP协议,所以有时候ping的结果只能作为参考,ping不通不一定说明对方IP不存在;
10 说一下TCP的3次握手4次挥手全过程是怎么样的?
11 防火墙的优缺点
- 优点:它能增强机构内存网络的安全性,用于加强网络间的访问控制,防止外部用户非法使用内部网的资源,保护内部网络设备的不被破坏,防止内部网络的敏感数据被窃取。防火墙系统决定了那些内部服务可以被外界访问;外界的哪些人可以访问内部的哪些服务,以及哪些外部服务可以被内部人员访问。
- 缺点:对于发生在内网的攻击无能为力;对于部分攻击,可以绕过防火墙,防火墙发现不了;防火墙的策略是静态的,不能实施动态防御;
12 网络编程
- 分层的思想也是设计大型软件的一种重要思想,有些操作系统就是基于分层的思想设计和实现的。
- TCP/IP 协议已经成为事实上的国际标准和工业标准;
- 网络模型:
- 网络接口层:网络接口层TCP/IP模型的最下一层,它包括多种逻辑链路控制和媒体访问协议;
- Internet层(网络层):网络层负责在发送端和接收端之间建立一条虚拟路径。这一层的主要协议是IP协议;
- 传输层:传输层通过位于该层的TCP协议或UDP协议在两台主机间传输数据。其中TCP协议提供可靠面向连接的服务,它保证数据能完整地按顺序地传送到目标计算机。
- 应用层:应用层面向用户提供一系列访问网络的协议,如FTP,SMTP,HTTP;
- 协议就像是人类的语言,人来进行交流需要一种双方都能够理解的语言,同样,两台计算机要进行通信也需要一种双方都能够理解的语言,这就是协议。
- 127.0.0.1是一个特殊的地址,它指代本机;
- 路由器TTL默认64,最大255;
13 套接字,linux下的网络编程指的就是套接字编程
1.创建套接字 int socket( int domain, int type, int protocol)
- AF_UNIX :创建只有本机内进行通信的套接字
- AF_INET:使用IPV4 TCP/IP 协议;
- AF_INET6: 使用IPV6 TCP/IP 协议;
- SOCK_STREAM 创建TCP流套接字;
- SOCK_DGRAM创建UDP套接字;
- SOCK_RAW:创建原始套接字
2. 建立连接 int connect (int sockfd, construct sockaddr * ,socklen_t addrlen );
3. 绑定套接字: int bind(int sockfd,struct sockaddr ,socklen addrlen);
4. 在套接字上监听:int listen(int s, int backlog)
5. 接受连接
6. TCP套接字的数据传输
- 1. 发送数据 send
- 2. 接收数据 recv
7. UDP套接字的数据传输
- sendto 发送数据
- recvfrom 接收数据
8. 关闭套接字 int close(int fd);
9. 关闭套接字 int shutdown(int fd);SHUT_RD SHUT_WR SHUT_RDWR
10. 在TCP/IP 协议规定了在网络上必须此案用网络字节顺序(也就是大端模式。)
11. 面向连接的socket模型: