对tcp/ip 的一些疑问&理解&总结

socket 的理解

先谈谈个人对tcp/ip协议栈的理解

tcp/ip 协议栈负责数据的封装,发送,接收,解封装,分发到应用程序
tcp/ip 协议栈是参照网络五层模型,根据RFC×××网络规范,实现的系统程序,提供网络服务

端口的理解

为啥引入端口

在网络通信过程中,需要唯一识别通信两端的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过 进程号进行识别。进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前不知道自己的进程号,如果需要运行后再广播进程号则很难 保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用公共服务,如HTTP和FTP等。

* 一个端口对应一个网络应用,一个应用可占据多个端口 *
我原来有这样的疑惑:

编写网络程序,首先,调用bind(sockfd,server_addr,length) 将某个socket 绑定到某个端口;
然后,你调用accept(sockfd,sock_addr_client,length),得到一个新的链接socket;
那么,在调用bind时,是否意味着sockfd 已经在不断接测是否有新的链接请求,那么它不就一直在占用这端口了吗,数据的接收和发送的套接字是通过哪个端口进行工作的?是否工作在另一个端口?

看这篇blog

我谈谈个人的理解:
bind()调用后的套接字的结构体,填充着服务端的ip和port;
accept调用后,获取到客户端的ip和端口;
tcp/ip 通讯在传输层网络层的传输的目地全部获取到
socket 是对TCP/IP协议栈的抽象,不是简单对网络层次的映射

socket本无C/S模型

tcp/ip 没有去规定设计者去这样设计网络框架,这是广大程序员设计的经典模型;
常见C/S,P2P(时常会有一个资源发现点)

原始套接字 & 高级套接字 & 标准套接字

  • tcp 套接字,udp套接字为标准套接字,与传输层打交道;
  • 原始套接字,与IP网络协议栈打交道,利用原始套接字构建特定类型的TCP或者UDP的分组
原始套接字标准套接字高级套接字
socket(AF_INET,SOCK_RAW,proctal)socket(AF_INET,SOCK_STREAM ‘or’ SOCK_DGRM,0)socket(AF_UNIX,SOCK_STREAM ‘or’ SOCK_DGRM,0)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值