Chinaunix首页 | 论坛 | 博客
  • 博客访问: 517104
  • 博文数量: 137
  • 博客积分: 3170
  • 博客等级: 中校
  • 技术积分: 1455
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-17 11:47
文章分类

全部博文(137)

文章存档

2015年(2)

2013年(1)

2012年(6)

2011年(5)

2010年(62)

2009年(61)

我的朋友

分类: LINUX

2009-09-17 14:46:50

  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()函数的区别。





%
阅读(1773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~