网络编程学习笔记(1)

         首先是四层通信模型:应用层,传输层,网络层,网络接口层。

         应用层其实就是自己定义开发的程序,像ftp,telnet等等,到了这一层,主要关心的就是装包与解包了,如果是做为服务器应用的话,还要考虑多并发,性能效率之类的问题。

         传输层,有两大类,即tcp与udp,具体报文结构可随意百度,这里偷点懒,就不给出来了。tcp被认为是可靠的传输协议,而udp则不是,可靠表现在有重发机制,以及同包不同组的分片序号,而这些, udp报文里头好像是没有看到的。还没去看tcp的实现,但是自己想了下重发的机制可能有这两种,一种是超时自动重发,就是超过一定时间后,目的主机还没有传回收包成功的消息,另一种可能是当ip包头的ttl被置为0或者发现校验和不正确时,传回一个icmp告诉发送端发送错误了,发送端则接收这个消息再发一回。有空一定要看看tcp实现。基于tcp的应用,几乎绝大部分都是采用tcp连接,不过tcp连接又有长连接与短连接之分,短连接就是通信双方建立连接并互相发消息成功后,连接就被释放掉了,这可能是为了节省资源,像很多的网页一般是采用这种的,而像网游之类的,一般是采用长连接的,即建立连接之后,这个连接除非被主动关闭,否则将一直存在而不释放,这样做自然也是为了提高效率,像网游这种,经常需要网络通信,频繁的建立连接又释放连接,反而成了效率上的障碍,更关键的是,有时服务器需要主动通知客户端,如果是短连接,可能这时服务器已经不知道客户端在哪了(因为没有保存连接)。不过现在也已听说手游也有用短连接的,是基于手机的网络通常没有pc的稳定(可能人带着手机坐车什么的引起的)

          之前一直以为icmp是udp的一种实现,因为都是无连接的,icmp其实不属于udp协议吧,没看到有udp的包头。icmp就是单独的一种协议,icmp数据是直接传给ip协议处理加头的,udp的用途,我听说过的大概有发心跳消息或者发视频流之类的,具体就不知道了,毕竟我也才刚开始关注这一块。不过合理的利用udp,感觉要比tcp好很多。只是猜想,纯属YY了。

           IP,几乎一切与网络相关的都基于ip(我是说几乎)。ip报头通常是20字节长,这20字节里头内容有点多,不好记,当然用多了,就容易了。现在映象最深的就是ACK与SYN标志了大笑,假设客户端与服务器要建立连接,基本的地址与端口当然是要写正确的了,连接的第一步,客户端发一个SYN=j(假设是1),ACK=0的包给服务器,表示要确认下建立连接,服务器处理了这个包,再发一个ACK=j+1,SYN=k的包给客户端,此时服务器就进入SYN_RECV状态了!当客户端收到服务端的SYN+ACK包时,再回发一个ACK=k+1的包,服务器若收到了此包,则连接就建立成功了!否则,服务器就会一直处于SYN_RECV状态,直到超时为止,如果客户端故意伪造一个TCP连接请求的包,但是源地址填的是随意的ip地址,就会出现服务器一直处于SYN_RECV状态了,一个这样客户端还好,如果有很多个这样的连接请求的包发过来,那就是SYN洪水啦~

         今天就到这,争取早睡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值