ip dontfrag linux,TCP/IP协议(linux下)

;中的定义为:

struct udphdr {

u_int16_t source;

u_int16_t dest;

u_int16_t len;

u_int16_t check;

};

关于UDP 协议的详细情况,请参考 RFC768

TCP

TCP 协议也是建立在IP 协议之上的,不过TCP 协议是可靠的.按照顺序发送的.TCP 的数据结

构比前面的结构都要复杂.

0 4 8 10 16 24 32

-------------------------------------------------------------------

| 源端口 | 目的端口 |

-------------------------------------------------------------------

| 序列号 |

------------------------------------------------------------------

| 确认号 |

------------------------------------------------------------------

| | |U|A|P|S|F| |

|首部长度| 保留 |R|C|S|Y|I| 窗口 |

| | |G|K|H|N|N| |

-----------------------------------------------------------------

| 校验和 | 紧急指针 |

-----------------------------------------------------------------

| 选项 | 填充字节 |

-----------------------------------------------------------------

TCP 的结构在;中定义为:

struct tcphdr

{

u_int16_t source;

u_int16_t dest;

u_int32_t seq;

u_int32_t ack_seq;

#if __BYTE_ORDER == __LITTLE_ENDIAN

u_int16_t res1:4;

u_int16_t doff:4;

u_int16_t fin:1;

u_int16_t syn:1;

u_int16_t rst:1;

u_int16_t psh:1;

u_int16_t ack:1;

u_int16_t urg:1;

u_int16_t res2:2;

#elif __BYTE_ORDER == __BIG_ENDIAN

u_int16_t doff:4;

u_int16_t res1:4;

u_int16_t res2:2;

u_int16_t urg:1;

u_int16_t ack:1;

u_int16_t psh:1;

u_int16_t rst:1;

u_int16_t syn:1;

u_int16_t fin:1;

#endif

u_int16_t window;

u_int16_t check;

u_int16_t urg_prt;

};

source 发送TCP 数据的源端口

dest 接受TCP 数据的目的端口

seq 标识该TCP 所包含的数据字节的开始序列号

ack_seq 确认序列号,表示接受方下一次接受的数据序列号.

doff 数据首部长度.和IP 协议一样,以4 字节为单位.一般的时候为5

urg 如果设置紧急数据指针,则该位为1

ack 如果确认号正确,那么为1

psh 如果设置为1,那么接收方收到数据后,立即交给上一层程序

rst 为1 的时候,表示请求重新连接

syn 为1 的时候,表示请求建立连接

fin 为1 的时候,表示亲戚关闭连接

window 窗口,告诉接收者可以接收的大小

check 对TCP 数据进行较核

urg_ptr 如果urg=1,那么指出紧急数据对于历史数据开始的序列号的偏移值

关于TCP 协议的详细情况,请查看 RFC793

TCP 连接的建立

TCP 协议是一种可靠的连接,为了保证连接的可靠性,TCP 的连接要分为几个步骤.我们把这

个连接过程称为"三次握手".

下面我们从一个实例来分析建立连接的过程.

第一步客户机向服务器发送一个TCP 数据包,表示请求建立连接. 为此,客户端将数据包的

SYN 位设置为1,并且设置序列号seq=1000(我们假设为1000).

第二步服务器收到了数据包,并从SYN 位为1 知道这是一个建立请求的连接.于是服务器也

向客户端发送一个TCP 数据包.因为是响应客户机的请求,于是服务器设置ACK 为1,sak_se

q=1001(1000+1)同时设置自己的序列号.seq=2000(我们假设为2000).

第三步客户机收到了服务器的TCP,并从ACK 为1 和ack_seq=1001 知道是从服务器来的确认

信息.于是客户机也向服务器发送确认信息.客户机设置ACK=1,和ack_seq=2001,seq=100

1,发送给服务器.至此客户端完成连接.

最后一步服务器受到确认信息,也完成连接.

通过上面几个步骤,一个TCP 连接就建立了.当然在建立过程中可能出现错误,不过TCP 协议

可以保证自己去处理错误的.

说一说其中的一种错误.

听说过DOS 吗?(可不是操作系统啊).今年春节的时候,美国的五大网站一起受到攻击.攻

击者用的就是DOS(拒绝式服务)方式.概括的说一下原理.

客户机先进行第一个步骤.服务器收到后,进行第二个步骤.按照正常的TCP 连接,客户机

应该进行第三个步骤.

不过攻击者实际上并不进行第三个步骤.因为客户端在进行第一个步骤的时候,修改了自

己的IP 地址,就是说将一个实际上不存在的IP 填充在自己IP 数据包的发送者的IP 一栏.这

样因为服务器发的IP 地址没有人接收,所以服务端会收不到第三个步骤的确认信号,这样

服务务端会在那边一直等待,直到超时.

这样当有大量的客户发出请求后,服务端会有大量等待,直到所有的资源被用光,而不能再

接收客户机的请求.

这样当正常的用户向服务器发出请求时,由于没有了资源而不能成功.于是就出现了春节

时所出现的情况.

----------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值