网络编程学习--准备

 Linux网络编程的准备工作

        1、TCP状态转换图

                TCP的一些状态虽然简单,但是结合代码理解起来。还是比较麻烦的。accept运行时,开始发起三次握手,当三次握手完成是,accept成功返回。TCP断开连接的时候。有4次分手,有时候是3次。比如TIME_WAIT状态。首先断开的一方会进入TIME_WAIT状态。当主动断开放断开后,内核会发送FIN包,然后自己由原来的ESTABLISHED状态进入到FIN_WAIT_1的状态。这时被动端会回应ACK(当然还有其它情况),此时被动端进入到CLOSE_WAIT的状态。然后被动端发送FIN,主动端发送ACK。但是有时候,主动断开方发送的是FIN、ACK。被动端发送FIN、ACK,然后是一个ACK就结束掉。

        2、进程与信号处理

                在设计高性能的服务器程序时,最简单的方式就是采用fork函数,但是fork函数带来的僵尸进程需要自己写信号处理函数来wait。当服务器的子进程结束时,会给父进程发送SIGCHLD信号。通过对这个信号的捕捉,然后在自己的信号处理函数中来wait子进程。信号处理函数用signal来调用。

        3、一些用于调试网络的命令

                netstat是linux下面常用的命令之一

                    netstat antpl                    #常用,结合grep

                    netstat -r                          #查看路由

                    netstat -s                        #查看协议统计信息

                tcpdump:命令行的抓包工具(图形的可以用wireshark)

                    tcpdump '(udp and port N) or icmp'    #只显示端口为N的UDP或者icmp

                    tcpdump 'tcp and port 80 and tcp[13:1] & 2 != 0'    #只显示80端口TCP分节中从首部开始计算偏移量为13的那个字节中的值为2.

                    tcpdump 'tcp and tcp[0:2] > 7000 and tpp[0:2] < 7005'    #只显示源端口在7000-7005之间的 

                losf命令:list open file

                    lsof -i TCP:daytime        #找出哪些进程提供daytime服务

                strace:

                    系统调用跟踪。

                    strace -o log ./filename                   


你可能感兴趣的:(网络编程学习--准备)