计算机网络简介

1. 计算机网络
从覆盖范围分为:局域网(LAN),城域网,广域网,英特网(互联网,Internet)
2. 计算机网络分层结构:
    a. OSI/RM标准:
        i. 协议(Protocol):参与通信的双方或者多方都要共同遵守的一些规则或标准,比如通信的流程,通信数据的格式等。
        ii. 应用层,处理网络应用
            1) HTTP:Hypertext Transfer Protocol超文本传输协议,端口80。B/S,C/S。
                a) HTTP协议基于TCP协议,浏览器(Browser)和Web服务器(Web Server)之间的通信遵守的就是HTTP协议,浏览器就是客户端程序
                B/S模式:浏览器+服务器(特殊的C/S模式)
                C/S模式:客户端+服务器
                b) HTTP特点:
                1.支持客户/服务器模式
                2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径
                3.灵活:允许传输任意类型的数据对象。
                4.无连接:限制每次连接只处理一个请求。
                5.无状态:协议对于事务处理没有记忆能力。
            2) FTP:文件传输协议,端口是20。
            3) DNS:域名解析服务,提供域名到ip地址转换。
            4) SMTP:简单邮件传输协议。
        iii. 表示层,数据表示。
        iv. 会话层,主机间的通信。
        v. 传输层,端对端的连接。
            1) TCP(Transmission Control Protocol,控制传输协议)
            2) UDP( User Datagram protocal,控制数据报协议)
        vi. 网络层,寻址最短路径。
            1) IP层(Internet Protocol):IP封装后给接口层。
            2) ICMP层(Internet Control Message Protocol):可以回送报文,测试网络是否通畅。Ping。
        vii. 数据链路层,基本单位是帧,又分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。
        viii. 物理层,二进制传输,基本单位是比特。
    b. TCP/IP标准:应用层,传输层,网络层,物理层
    TCP/IP标准是事实上的国际标准,而OSI/RM标准是理论上的国际标准。
3. 计算机网络中的地址包括IP和Port
    a. IP地址:Internet Protocol Address,英特网协议地址,用来标识一台主机(上网设备)的地址
        IPv4地址记法:四段点分式 128.0.34.116
        IPv4地址使用32位存储表示,IPv6地址使用128位存储表示
        IP地址由网络号和主机号构成
        IP地址和子网掩码进行按位与运算得到的结果就是网络号
        默认网关:连接不同网络的桥梁

        DNS服务器:域名解析
        本地回环测试地址:127.x.x.x,为了方便在本机上测试网络通信程序

        私有IP地址:只能用于局域网,不能用于Internet
        10.x.x.x
        172.16.x.x - 172.31.x.x
        192.168.x.x

    b. 端口号:Port,用来唯一标识同一台主机中的不同网络通信程序,范围为0-65535,其中0-1024之间的端口号为熟知端口号,被一些知名常用的应用专用,所以我们自己开发的程序尽量不要使用这个范围的端口号,以免冲突,比如Web服务器通常使用80号端口等。
4. 实现网络通信
    a. 套接字(socket):插座,即网络接入点,相当于手机
    套接字有三种类型:
    1.流式套接字,用于TCP通信
    2.数据报式套接字,用于UDP通信
    3.原始套接字,用于基于IP协议的通信,较低层,用的较少
    b. 两种方式:
        i. TCP:Transport Control Protocol,传输控制协议,面向连接的,传输可靠,内部具有拥塞控制,超时重传,差错校验等机制,缺点是通信效率较低,开销较大。
            基于TCP协议通信的实现:基于C/S模式,即Client/Server模式,参与通信的双方是不对等的,分为客户端和服务器端,要单独实现。
            服务器在通信过程中处于被动的角色,通信是由客户端先主动发起的。

            TCP服务器的实现步骤:
            1.创建监听套接字,相当于买部手机
            2.绑定地址,相当于给手机上号办卡
            3.监听,相当于将手机设置为待机状态
            4.接收客户端连接请求,相当于接听来电
            5.收发数据,相当于互相通话
            6.断开连接,相当于通话结束挂机
            7.关闭监听套接字,相当于把手机关机或设置为飞行模式

            TCP客户端的实现步骤:
            1.创建套接字
            2.绑定地址(即显式绑定,可选的,如果不进行显式绑定或者显式绑定失败,在后面调用connect函数时,系统会随机挑选一个空闲的端口号给套接字绑定,这称为隐式绑定)
            3.连接服务器
            4.收发数据
            5.断开连接

            socket:
            #include <sys/types.h>
            #include <sys/socket.h>

            int socket(int domain,int type,int protocol);//领域,类型,协议

            #pragma pack(1)

        ii. UDP:User Datagram Protocol,用户数据报协议,无连接的,传输不可靠,尽力传输,传输效率高,开销很小,但容易出现丢包,失序,乱序,出错等问题。
            1) 广播地址:代表多台主机,分为网段广播地址和受限广播地址(255.255.255.255)
5. 基于tcp协议通信中的粘包问题
    a. 现象:发送方连续多次调用send发送数据时,如果接受方调用recv接受数据时,如果提供的接受缓冲区足够大,那么可以一次性地将这些数据都接收到。
    b. 产生的原因:
        i. 发送方导致的粘包:TCP协议内部有一个优化机制(为了提升传输效率),当我们调用send时,tcp协议并不会立即将数据打包出去,而会等待一小段时间,如果在这段时间内我们再次调用send,它会将这两份数据打成一个数据包并继续等待,直到这小段时间内没有再次调用,则将网络发送缓冲区中的数据打成一个数据包发送出去。
        ii. 接收方导致的粘包:对方发送过来的数据包首先会进入网络接收缓冲区中等待我们调用recv区接收,如果我们有多个数据包发送过来,但是我们没有及时调用recv区接收,那么这些数据包会合在一起,当我们调用recv时,如果提供缓冲区足够大,会一次性地将他们都接收到。
        iii. 粘包问题的根本原因是系统为了提高传输效率导致的。
    c. 解决方案:
        i. 在数据的开头或结尾附上一些额外的信息,即加上包头和包尾,比如在包头附上即将发送数据的长度等信息,或者在包尾附上特殊数据,以表示该批数据已经发送完毕。
        ii. 应答式通信,即发送一份数据后等待对方的回复,收到正常回复后再发送下一份数据。
        iii. 增加连续发送数据的时间间隔(很草根的解决方案)。
        iv. 取消TCP协议内部的优化机制(调用setsocket函数实现,不是所有系统都支持这样做)
        int optval=1;
        setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,&optval,sizeof(optval));

大量数据的发送和接收问题:不能通过调用一次send和recv搞定,要分多次进行
TCP连接是通过三次握手建立的,断开连接是通过四次挥手实现的,即connect函数内部发生了三次握手的过程,close函数只是断开一半连接
乱码问题产生的根源:编码和解码方案不一样
编码转换操作:调用iconv族函数来实现

停止防火墙  service iptables stop
启动防火墙  service iptables start
查看防火墙配置 iptables -L -n

串行传输:逐位传输,即传输的是比特流,适用于长距离通信,线缆少,同步控制方便,但传输效率低
并行传输:多位数据同时传输,只适用于短距离通信,线缆多,同步控制很麻烦,传输效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的提千万

江山父老能容我,不使人间造孽钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值