linux网络编程

本文详细解读了网络通信中TCP/IP模型、各层协议功能、socket接口及IP地址管理,包括TCP/UDP区别、IP地址转换与字节序问题。适合初学者理解网络通信基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

网络时代的发展

网络特点: 
        cs结构: client -客户端  server -服务器
                1.瘦客户机 ---胖服务器  客户端app简单 ,服务器复杂强大
                2.服务器是被动的,客户机是主动的
                        服务器一般不会主动发起数据,而是等待客户端的请求,处理,然后回应                     
        网络分层结构: 
                网络通信是一个很复杂的过程,如何解决复杂的问题 ?
                网络采用分成的结构: 1.OSI模型        它将网络分为7层    理论很完美  复杂  没有产品
                                                   2.TCP/IP模型                分为4层                实用性强    都在用


网络基础知识

1、网络分层结构:

  TCP/IP模型:
        应用层   application, 就是使用网络传送数据的app
                你自己写的网络程序 ---提供要发送的数据
        
        传输层     TCP  transport control 层,又称TCP层
                    负责数据安全送达,他有很多种机制,保证对方成功的收到
                    
                 端口号: 16bit地址
                    想给对方发消息,要获知对方的端口号
                    每个网络程序都必须绑定一个  端口号 
                    为什么我们以前没有用到它,因为每款app里都有一个自己默认的端口号
        网络层        又称IP层,internet--网络
                负责 网际寻址
                IP地址: 32bit,网络寻址的关键
                
                只提供端到端服务的:
                    一端到另一端的传输,一对一,一个IP到另一个ip
                    网络只负责发送数据,不负责数据安全问题(对方收没收到,收到的数据不正确)
        
        网络接口层    net intf
                管理各种类型的网卡,并把上一层发来的数据
                通过合适的网卡发送出去
                 网卡地址: 每个网卡都会有一个自己的地址,又称物理地址
                        网络地址是 48bit -->6B

网络每一层如何实现自己的功能?

2、网络的各层协议:

网络接口层:
            ARP----address resolution protocal  地址解析协议
                用途: 已知对方的ip地址, 但是不知道对方的网卡地址
                        那么数据就没法在网卡之间传输,那么如何根据对方的ip获取网卡地址
                            ARP协议帮你搞定  ip地址--->网卡地址
            RARP ---reverst ARP 翻转
                根据网卡地址获取对方IP地址
网络层: IP层
            IP协议 ,负责网络寻址
            ICMP协议 :internet control manage protocal, 网络控制管理协议
                    流量统计, 计费,限流,判断某个ip 在线否 ---ping
                    
            IGMP协议: internet group manage protocal
                    网络  组播管理协议
传输层: TCP层
        
                            实时性      资源占用    安全性  
            电话:    强                大                高                  一对一 
            短信:    弱                小                低                  一对多
            
                                                                        领域
            TCP:    提供面向连接的,  字节流 安全可靠的服务                    文件传输 ,文字
            UDP:    提供面向无连接的, 数据包的,不安全可靠的服务        AV-audio  vidio

socket接口-----套接字:

        file : open        close        read        write

        网络:socket      close        recv         send      accept     bind       listen

socket 有三种类型:

        1.流式套接字:提供面向连接的, 字节流 安全可靠的服务               TCP

        2.数据包套接字:提供面向无连接的的, 字节流 安全可靠的服务               TCP

        3.原始套接字:利用网络层提供的功能,自己实现一套协议。

IP地址:

        ipv4    32bit,大概有42亿个IP

        IP地址分为两部分,高字节----网络号        低字节---主机号,

根据网络号占的比特不同,又分为,A,B,C,D,E

解决IP不够用的问题??

        1)ipv6        128bit ,用得很少

        2)局域网IP:大家都使用局域网IP,同一个局域网可以共享一个公网IP

IP地址的转换:

        IP地址 32bit---3283787384774,但生活中我们使用的是“192.168.3.58”

        点分法表示ip地址:  分成4个8bit ,并以 . 隔开

字节序问题:

        当一个多字节类型(short 、int long )的数据,存放在终端上(可能是大端设备 也可能是小端设备,他们们存放数据的方式不一样),当小端设备发送数据,拷贝给大端设备的时候,就会出现问题。

        解决之法:

                统一字节序,发送方在发送之前把本地字节序,转换为网络字节序,

接收方收到数据,把网络字节序转换为本地字节序

linux 提供了几个函数,帮助我们完成转换

        short: 

           short htons(short n)     :host to net short           //本地字节序--->网络字节序
           short ntohs(short n)       :net to host short        //网络字节序---->本地字节序
        int/long: 在网络上,int 就是long
            long htonl(long n)       :host to net long
            long ntohl(long n)        :net to host long


总结

        知识点很琐碎,但工作中会用到很多,需要慢慢消化吸收。如果有什么欠缺的,不正确的,欢迎大家留言补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值