技术综合

28-TCP 协议(超时与重传)

TCP超时与重传应该是TCP最复杂的部分之一了。Windows和Linux对这部分的实现还有所不同,但是算法基本上还是差不多的。超时重传是TCP保证可靠传输的基础。当TCP在发送数据时,数据和ack都有可能会丢失,因此,TCP通过在发送时设...

53-套接字选项(SO_REUSEADDR)

SO_REUSEADDR是非常常用的选项之一,它有四个功能,我待会再写,接下来先看实验。1.程序路径代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp....

45-批量输入异常处理(shutdown 函数)

本文解决上一篇文章遇见的bug.1.程序路径代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已经clone过这个代码了,请使用gitpu...

49-使用 poll 改写服务器

在前面,我们使用了select改写了服务器,本文使用poll来改写服务器。1.程序路径代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已...

48-拒绝服务型攻击(Denial-of-Service Attacks)

拒绝服务型攻击(Denial-of-ServiceAttacks),简称dos攻击。它针对服务器漏洞,使用特殊手段消耗服务器资源,从而达到服务器无法正常为其它客户端提供正常服务的目的。是的,我们之前用select改写的服务器就存在漏洞。有没...

47-将多进程并发服务器改成 IO 复用

只有趟过各种坑,解决了各种离奇古怪的网络编程异常,才能一步一步的提升,其次再学习新的技术,就不会感觉困惑。前面的程序,我们只是先拿客户端进行了开刀,将其修改成了IO多路复用模型,因为它最简单。后面我还看到,即使这样很简单,但是还有很多很多的...

51-套接字选项(概述)

相信你学过前面的TCP协议也知道,里头的算法非常多,有些算法你可以开启,有些你可以关闭。比如你可以设置发送和接收缓冲区大小,也可以设置是否打开Nagle算法等等。这些是如何做到的呢?有很多方法可以用来获取和设置影响套接字的选项:getsoc...

50-使用 epoll 改写服务器

使用epoll改写服务器,会让我们的程序变得更加简单、高效。1.程序路径代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已经clone过...

57-其它套接字选项

还有很多套接字选项,比如SO_KEEPALIVE,SO_RCVBUF,SO_SNDBUF等,这些就不打算在博客里详细去实验,大家可以自己使用opt程序进行实验。以后如果我们遇到了非得用它的时候,再会详细的去讨论它们,本章我们主要掌握几个常见...

61-面向连接的 UDP

前面我们已经知道,UDP编程中的调用sendto和recvfrom产生的错误是不会返回的。主要原因在于套接字是无连接的。要想让它们返回错误,只有让套接字变成有连接的。1.程序路径代码托管在gitos上,请使用下面的命令获取:gitclone...

56-套接字选项(TCP_CORK)

Nagle算法尽量减少小分组出现在网络上,而TCP_CORK是完全避免小分组出现在网络上。该选项是在Linux2.2才引入的。cork这个单词,意为“塞子”,我们把TCP发送缓冲区想象成一个水池,而cork的作用就是把这个水池的出口堵住,直...

23-TCP 协议(紧急标志)

1.紧急标志当你再次看到图1时,相信你已经无比的亲切,再观察下面彩色的6个标志位,有5个你已经熟知了,还剩下最后一个URG,对,就是图1中那个鲜红的,醒目的那个位置。图1TCP首部除此之外,还有一个字段——16位紧急指针,它正是配合URG标...