1.tcp分离外来的分节p39--缓冲区大小及限制
tcp三次握手:第一,服务器必须准备好接受外来连接,通过调用socket,bind,listen函数来完成,称为被动打开(passive open);第二,客户通过调用connect进行主动打开(active open).这引起客户tcp发送一个SYN(每个SYN含有若干tcp选项,其中MSS(maximum segment size) 是通知对端它的最大分节大小,即它能接受的每个tcp分节中的最大数据量)分节,它告诉服务器客户将在待建立的连接中发送的数据的初始序列号。一般情况下,SYN分节不带数据,它只含一个ip头部、一个tcp头部及可能的tcp选项;第三,服务器必须确认客户的SYN,同时也发送一个SYN分节,它含有将在同一连接中发送的数据的初始序列号。服务器以单个分节向客户发送SYN和对客户SYN的ACK;第四,客户必须确认服务器的SYN.连接建立过程至少需要交换三个分组,故称tcp三路握手(three-way hand shake)。
tcp终止:第一,某个应用进程首先调用close,称为主动关闭(active close) 。这一端的tcp因此发送一个FIN分节,表示数据发送完毕;第二,接收到FIN的另一端执行被动关闭(passive close)。这个FIN由tcp确认。它的接收也作为文件结束符传递给接受端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接受意味着应用进程在相应连接上再也接受不到额外数据;第三,一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的tcp也发送一个FIN;第四,接收到这个FIN的原发送端tcp(即执行主动关闭的那一端)对它进行确认。
TCP无法仅仅通过查看目的端口号来分离外来的分节,它必须查看套接口对的所有4个元素才能确定由哪个端点接收到达的分节。对套接口和套接字的理解要准确。
MTU(maximum transmission unit)最大传输单元,它由硬件规定,以太网的MTU为1500字节。
两台主机间的路径上的最小MTU称为路径MTU(path MTU)。
MTU和IP数据报的最大大小65535字节,二者关系?
MSS大小的tcp分节。
tcp将数据块加上tcp头部以构成分节,ip层给每个tcp分节加上ip头部就构成数据报。
tcp层对应套接口
ip层对应ip地址
2.写一个套接口write成功返回,仅仅表示我们可以重新使用进程的缓冲区,并不告诉我们对方tcp或应用进程已经接收到数据。
3.关于SIGCHLD信号的处理,子进程结束时,向服务器发送此消息,如果父进程不处理此消息,子进程进入僵死状态(Z或者defunct标识),怎么样就是算处理了?
4.习题 1.13
4.1查找自己的网络拓扑
/home $ netstat -in 查看网络接口
lo 回馈(loopback)接口 eth0 以太网接口
查看路由表,有和用途?
5.关于TIME_WAIT
我的测试是客户端主动关闭进入TIME_WAIT状态
而服务器主动关闭进入fin_wait_2
6.一个输入操作分为两个阶段:
第一:等待数据准备好
第二:从内核到进程拷贝数据,更详细地,更进一步,
一个套接口上的输入操作
第一:等待数据到达网络,分组到达时,它被拷贝到内核的某个缓冲区
第二:是将数据从内核缓冲区拷贝到应用缓冲区。
7. 第六章: I/O复用
7.1 I/O复用,阻塞问题,就绪通知,
I/O复用用于客户端和服务器,典型场合:
客户端处理多个描述字;
客户端同时处理多个套接口是可能的,但很少见。
tcp服务器既要处理监听套接口,又要处理已连接套接口。
服务器既要处理tcp,又要处理udp
服务器要处理多个服务或者多个协议。
7.2五种基本的I/o模型:
阻塞I/O; 非阻塞I/O; I/o复用(select, poll); 信号驱动I/O(SIGIO); 异步I/O.
同步i/o操作:引起请求进程阻塞,直到i/o操作完成。
异步i/o操作:不引起请求进程阻塞。
7.3 select函数
select等待多个事件中的一个发生,当有一个或多个事件发生时或时间到,进程被唤醒。阻塞在select调用上。select调用驱动。
7.3.1 timeval的设置。
对于信号的处理。接收和发送低潮限度(可以修改套接口选项改变)
设置select的最大描述字数需要修改FD_SETSIZE并编译内核。
7.3.2 我们需要一种方法可以关闭tcp连接的一半,也即是我们想给服务器发一个FIN,告诉它我们已经完成了数据发送,但仍为读而开发套接口描述字。注意shutdown()和close()函数的区别。
%
阅读(1813) | 评论(0) | 转发(0) |