网络学习day1----tcp/ip协议、udp

发布于:2025-07-25 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、a /etc/123

1.应用层

为网络用户提供各种服务,例如电子邮件、文件传输等。

2.表示层

1)加密解密 gzip.

2)为不同主机间的通信提供统一的数据表示形式。

3.会话层

1)网络断开,连接状态,keep-close keep-alive

2)负责信息传输的组织和协调,管理进程会话过程。

4.传输层

1)tcp udp 协议 文件视频,音频 网路层ip NAT 链路层 交换机 数据的格式化 帧 校验

2)管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。

4.网络层

1)负责数据传输的路由选择和网际互连。

5.数据链路层

负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。该层可分为逻辑链路控制子层(LLC)和介质访问控 制子层(MAC).

6.物理层

1)100Mb/8 Gbits 100MB 同轴电缆 10Gb 2.4G 5G

2)负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械、电气、功能等特性。

二、TCP/IP模型 ==》网际互联模型==》分为4层:

实用模型 ===》工业标准

tcp/ip协议栈

1.应用层

              ====》应用程序

2.传输层

              ====》端口号tcp udp

3.网络层

              ====》IP 地址

4.接口层

              ====》网卡驱动 1GB ile

pcap

三、TCP/IP协议族:

www.taoba0com ---> 192.168.0.19

www.voa.com vpn

dns 域名解析

DHCP

1.应用层:

HTTP TFTP FTP SNMP DNS ...

2.传输层:

TCP  UDP  56k猫

3.网络层:

IPICMP(ping) RIP OSPF IGMP组播

4.物理层:

ARP  RARP ... ip--->mac

arp.. 192.160.0.112

四、TCP编程基础知识

1、网络基础分类:A B C D E 类

010 3333344444

IP地址 == 网络位+ 主机位

IP地址的分类:点分十进制ipv4 712934

1.1 A类:超大规模性网络

888 8

1.0.0.0 - 126.255.255.255 126.1.1.1

126.1.1.2   255.0.0.0

私有: 10.0.0.0 - 10.255.255.255

127.0.0.1

1.2 B类:大中规模型网络

128.0.0.0 - 191.255.255.255

128.2.1.2   128.2.7.2   //前两个固定

255.255.0.0

私有: 172.16.0.0 - 172.31.255.255

1.3 C类:中小规模型网络

192.0.0.0 - 223.255.255.255  //前三个固定  //ip地址

255.255.255.0  //子网掩码

私有:192.168.0.0 - 192.168.255.255

静态路由

192.168.0.0

192.168.0.1网关

192.168.0.255

1.4 D类:组播和广播

224.0.0.0 - 239.255.255.255    //组播地址     //一人发多人收 (一对多)

192.168.0.255 == 255.255.255.255  //广播地址

235.1.2.3

192.168.1.0

192.168.0.1网关

192.168.1.255 广播

1.5 D类:组播和广播

224.0.0.0 -239.255.255.255

192.168.0.255 == 255.255.255.255

235.1.2.3 192.168.1.0

192.168.0.1网关

192.168.1.255 广播

1.6  E类:实验

240.0.0.0 - 255.255.255.255

1.7  网络配置

私有地址:192.168.x.x 局域网地址。

配置文件--->sudo vim /etc/network/interfaces

sudo /etc/init.d/networking restart

sudo reboot 192.168.0.0

192.168.0.1 route

192.168.0.255 boardcast

801.n.g

单机上网的配置:

1)有网络接口并插入网线。

2)有ip地址

3)配置网络设置

   ip: ifconfig ethX X.X.X.X/24 up ifconfig ens33 192.168.0.13/24 up 255.255.255.0

   网关 : route add default gw x.x.x.x DNS : vi /etc/resolv.conf ==>nameserver 8.8.8.8

   测试:: ping www.baidu.com

                 netstat -anp

2.网络接口

2.1socket 套接字

文件描述符

==》BSD socket ==》用于网络通信的一组接口函数。

socket api application interface

2.2ip+port   地址+端口

ip---->地址      port---->端口

2.2.1地址用来识别主机

2.2.2端口用来识别应用程序

1)port分为TCP   port /UDP

2)port 范围都是:1-65535 约定1000 以内的端口为系统使用。

      0不是有效的端口号

3. 网络字节序

大端存储主机字节序 12 00小端0x12345678 00 12 192.168.0.12 12.0.168.192 0012

数字转换函数: #include <arpa/inet.h> 1236234687

主机转网络 :uint32_t htonl(uint32_t hostlong);

ipv4 192.168.0.1 1~65535

uint16_t htons(uint16_t hostshort);

网络转主机:host to net net to host

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

五、UDP操作函数

1.代码示例

ser端   //服务器

#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>

typedef  struct sockaddr *(SA);

int main(int argc, char **argv)
{
  // 1 socket套接字创建
  // AF_INET---ipv4,SOCK_DGRAM---udp最小数据报
  int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
  if (-1 == udpfd)
    {
      perror("socket");
      return 1;
    }
  //给套接字 设定ip+port
  // man 7 ip
  struct sockaddr_in ser, cli;
  bzero(&ser, sizeof(ser));
  bzero(&cli, sizeof(cli));
  ser.sin_family = AF_INET;
  // host to net short
  //小端转大端
  ser.sin_port = htons(50000);
  //点分十进制转大端 (数字转成char *类型ip地址)
  ser.sin_addr.s_addr = inet_addr("192.168.31.198");

  // 2 bind
  //bind目的:让服务器找到客户端
  int ret = bind(udpfd, (SA)&ser, sizeof(ser));
  if (-1 == ret)
    {
      perror("bind");
      return 1;
    }

  // 3 recvfrom
  socklen_t len = sizeof(cli);
  while (1)
    {
      char buf[512]="hello,";
      recvfrom(udpfd, buf,sizeof(buf),0,(SA)&cli,&len );
      printf("from cli:%s\n",buf);
      time_t tm;
      time(&tm);
      sprintf(buf,"%s %s",buf,ctime(&tm));
      // 4 sendto
      sendto(udpfd,buf,strlen(buf),0,(SA)&cli,len);
    }

    //5 close
    close(udpfd);

  // system("pause");
  return 0;
}

cli端   //客户端

#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

typedef struct sockaddr *(SA);

int main(int argc, char **argv)
{
  // 1 socket
  int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
  if (-1 == udpfd)
    {
      perror("socket");
      return 1;
    }
  struct sockaddr_in ser;
  bzero(&ser, sizeof(ser));
  ser.sin_family = AF_INET;
  ser.sin_port = htons(50000);
  ser.sin_addr.s_addr = inet_addr("192.168.31.198");

  int i = 30;
  while (i--)
    {
      char buf[512] = "hello,";
      // 2 sendto
      sendto(udpfd, buf, strlen(buf), 0, (SA)&ser, sizeof(ser));
      // 3 recvfrom
      recvfrom(udpfd, buf, sizeof(buf), 0, NULL, NULL);
      printf("from ser:%s",buf);
      sleep(1);
    }

  // 4 close
  close(udpfd);
  // system("pause");
  return 0;
}

2.UDP特性

2.1无连接

不需要维护繁杂网络状态。网络开销小。通信双方通信过程,无法知道对方进程关闭。如果需要告知,需要发信息通知。 

2.2不可靠

传输数据的过程中,会有丢包。但是实时性好。适用直播 视频传输,音频传输。

2.3数据报,数据间有边界,收发需要对应

2.4实时性较弱

2.5很容易实现一对多 。

2.6可以组播,广播

3.操作步骤


网站公告

今日签到

点亮在社区的每一天
去签到