WSASocket的参数IPPROTO_IP和IPPROTO_TCP

来源:互联网 发布:qt串口编程怎么调试 编辑:程序博客网 时间:2024/06/09 23:46


WSASocket的参数IPPROTO_IP和IPPROTO_TCP [问题点数:100分,结帖人zxcdewq]

 收藏
楼主发表于: 2011-09-12 14:19:23
WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,SOCK_STREAM);

WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,SOCK_STREAM);

为什么客户端和服务器端分别指定IPPROTO_IP和IPPROTO_TCP程序能正常运行?

客户端和服务器端不需要指定相同的参数吗?
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
回复次数:3
#1 得分:50回复于: 2011-09-13 15:49:36
数据的级别不一样,客户端在IP层发送,服务端以TCP层接受,这当然可以。

就像你写一个原始套接字的嗅探器,可以抓取UDP和TCP的包一样。
CSDN博客第二期最佳移动开发博主评选
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#2 得分:0回复于: 2011-09-14 08:42:12
谢谢回答。

如果客户端使用IPPROTO_TCP发送,服务器端使用IPPROTO_IP接收呢?

客户端自动加上了IP层的处理?
免费领取CSDN积分大礼包
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#3 得分:50回复于: 2011-09-14 10:18:00
请看下面这幅图

   HTTP等(应用层) 
     |
   TCP/UDP (运输层)
     |
     IP(链路层)
     |
   接口层

一个由网卡传送过来的帧,如果是一个HTTP等应用协议的,那么它必然在下面三层都有对应的结构,再比如,一个纯粹的IP包(比如,一个ICMP诊断包),就只有下面两层的结构。

你可以设想,当某个客户端发给服务器一个TCP包(流的一个单元),那么,如果服务器在IP设置了原始套接字的接受,也可以收到这个TCP的IP层结构。