linux网络编程总结

来源:互联网 发布:淘宝的会员名怎么修改 编辑:程序博客网 时间:2024/04/28 15:59

1、应用层协议有:ping,telnet,OSPF,DNS;传输层协议:TCP(对应应用层的telnet和网络层的ip协议)和UDP(对应应用层的DNS和IP协议),网络层协议:ICMP(对应应用层的ping协议和网络层的IP协议)和IP协议。数据链路层协议:ARP,Data Link,RARP协议(本层协议对应网络层的IP协议)。

2、数据链路层两个常用的协议是ARP协议(地址解析协议)和RARP(逆地址解析协议)。

3、网络层实现数据包的选路和转发。网络层的任务就是选择这些中间节点,以确定两台主机之间的通讯路劲。网络层对上层协议隐藏了网络拓扑连接的细节。ICMP协议是因特网控制报文协议,它是IP协议的重要补充,主要用来检测网络连接。

4、ICMP报文分为两大类:一类是差错报文,这类报文主要用来回应网络错误,比如目标不可到达和重定向;另一类是查询报文,这类报文用来查询网络信息,比如ping程序就是使用ICMP报文查看目标是否可到达。其中重定向报文使用代码值0表示对网络重定向,代码值1表示对主机重定向。ICMP报文报文使用16位校验码和字段对整个报文进行循环冗余校验,以检验报文在传输过程中是否损坏。

5、传输层为两台主机上的应用层程序提供端到端的通讯,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。传输层为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发,链路的超时重连等。

6、数据链路层、网络层和传输层负责处理网络通讯细节,这部分必须既稳定又高效,他们都是在内核空间中实现。应用层则在用户空间实现,它主要负责处理众多逻辑,不服文件传输、名称查询和网络管理等。

7、UDP和TCP封装过程类似,不同的是UDP无需为应用层数据保存副本,因为他提供的服务是不可靠的。

8、TCP报文段和UDP数据报通过其头部的16位的端口号字段来区分上层协议程序。DNS协议对应的端口是53,HTTP协议对应的端口号是80,。

9、以太网ARP请求/应答报文的格式如下:硬件类型2个字节,协议类型2个字节,硬件地址长度1个字节,协议地址长度1个字节,操作2个字节,发送端以太网地址6个字节,发送端IP地址4个字节,目标端以太网地址6个字节,目标端IP地址4个字节。

10、socket定义一组API提供的如下功能:一是将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据,或者是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据;二是应用程序可以通过他们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为。
 
11、IP头部信息出现在每个IP数据报中,用于指定IP通讯的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通讯行为。
IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。
12、IPv4头部结构:4位版本号,4位头部长度,8位服务类型(TOS)16位总长度(字节数)是指整个IP数据报的长度   16位标识唯一地标识主机发送的每一个数据报  3位标识字段的第一位保留  13位分片偏移是分片相对原始IP数据报开始出的偏移  8位生存时间  8位协议用来区分上层协议  16位头部校验和由发送端填充,接收端对其使用CRC算法以检验IP数据报头部在传输过程中是否损坏   32位的源端IP地址和目的端IP地址用来标识数据包的发送端和接收端   IPv4最后一个选项字段是可变长的可选信息,可选信息包括记录路由、时间戳、松散源路由选择   严格源路由选择。
13、测试机器上执行telnet命令登录本机:sudo tcpdump -ntx -i lo;telnet 127.0.0.1。
14、ICMP重定向报文:ICMP重定向报文的类型值是5(8位类型);代码字段有4个可选址(8位代码),默认写为1;16位校验和;应该使用的路由器的IP地址;原始IP数据报的头部信息(包括可选字段)+数据部分的前8字节。
 
15、TCP协议:TCP头部信息、TCP状态转移过程:TCP连接到断开的整个过程中的状态迁移、TCP数据流:交互数据流和成块数据流、TCP数据流的控制:超时重传和拥塞控制。
16、当接受端收到一个或多个TCP报文段后,TCP模块将它们携带的应用程序数据按照TCP报文段依次放入TCP接收缓存中,病通知应用程序读取数据。接收端应用程序可以一次性将TCP接收缓冲区中的数据全部读出,也可以分多次读取,这取决于用户指定的应用程序读缓冲区的大小。因此,应用程序执行的读操作次数和TCP模块接收到的TCP报文段个数之间也没有固定的数量关系。UDP模块就将其封装成一个UDP数据报并发送值。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。
17、TCP固定头部结构:16位端口号;32位序号:一次TCP通讯过程中某一个传输方向上的字节流的每个字节的编号;32位确认号;4位头部长度;6位标志位:URG标志,ACK标志,PSH标志,RST标志,SYN标志,FIN标志;16位窗口大小;16位校验和;16位紧急指针。
18、TCP半关闭状态,连接超时(重新连接多次然后超过重连时间)等情况的了解。connect连接失败有连个原因,目标端口不存在,或是在超时时间内未收到服务器确认报文段。
19、复位报文段:TCP连接的一端会向另一端发送携带RST标志的报文段,即复位报文段,以通知对方关闭连接或重新建立连接。
产生复位报文段的3种情况:(1)访问不曾在的端口,(2)异常终止连接,(3)处理半打开连接
20、
 
21、大端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序则是指整数的高字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。linux提供了4个函数来完成主机字节序和网络字节序之间的转换,函数名是:htol,htons,ntohl,ntohs。
22、IPv4地址和用网络字节序整数表示的地址之间的转换的函数名为:inet_addr,inet_aton,inet_ntoa,inet_pton,inet_ntop。
 
23、linux系统提供一个守护进程来处理系统日志——syslogd,升级版为——rsyslogd。rsyslogd守护进程既能够接收用户进程输出的日志,又能够接收内核日志。用户进程是通过调用syslog函数生成系统日志的。该函数将日志输出到一个UNIX本地域socket类型的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。内核日志由printk等函数打印至内核的环状缓存中。环状缓存的内容直接映射到/proc/kmsg文件中。rsyslogd则通过读取该日志获得内核日志。默认情况下,调试信息会保存至/var/log/debug文件,普通信息保存至/var/log/messages文件,内核消息保存至/var/log/kern.log文件。rsyslogd的主配置文件是/etc/rsyslog,.conf,包含:内核日志输入路径,是否接受UDP日志及监听端口,是否接受TCP日志及监听端口,日志文件的权限,包含哪些自配置文件。
 
24、C/S模型:所有客户端都通过访问服务器来获取所需的资源。服务器启动后,首先创建一个或多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户端连接。服务端稳定运行之后,客户端就可以调用connect函数向服务器发起连接了。由于客户连接请求是随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件。服务器使用的是I/O复用技术之一的select系统调用。当监听到连接请求后,服务器就调用accept函数接收它,病分配一个逻辑单元为新的连接服务。服务器给客户端分配的逻辑单元是由fork系统调用创建的子进程。
25、I/O处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受行的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是,数据的收发不一定在I/O处理单元中执行,也可能在逻辑单元中执行。对于一个服务器机群来说,I/O处理单元是一个专门的接入服务器。他实现负载均衡,从所有逻辑服务器中选取负载最小的一台来为新客户服务。
26、一个逻辑单元通通常是一个进程或线程。他分析并处理客户数据,然后将结果传递给I/O处理单元或者直接发送给客户端。对服务器机群而言,一个逻辑单元本身就是一台逻辑服务器。服务器通常拥有多个逻辑单元,以实现对多个客户任务的并行处理。
27、网络存储单元可以是数据库、缓存和文件,甚至是一台独立的服务器。但它不是必须的,比如ssh、telnet等登录服务就不需要这个单元。
28、请求队列是各单元之间的通信方式的抽象。I/O处理单元接收到客户请求时,需要以某种方式通知一个逻辑单元来处理该请求。同样,过个逻辑单元同时访问一个存储单元时,也需要采用某种机制来协调处理竟态条件。对于服务器机群而言,请求队列是各台服务器之间预先建立的、静态的、永久的TCP连接。这种TCP连接能够提高服务器之间交换数据的效率,因为它避免了动态创建TCP连接导致的额外的系统开销。
29、select系统调用的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等时间。
0 0