首页 > 其他分享 >20201322学习笔记11

20201322学习笔记11

时间:2022-11-11 20:22:24浏览次数:44  
标签:11 协议 IP TCP 笔记 IP地址 服务器 接字 20201322

第十三章 TCP/IP和网络编程

概述

本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/P网络中的UDP和TCP协议、端口号和数据流;阐述了服务器-客户机计算模型和套接字编程接口;通过使用UDP和TCP套接字的示例演示了网络编程。第一个编程项目可实现一对通过互联网执行文件操作的TCP服务器–客户机,可让用户定义其他通信协议来可靠地传输文件内容。第二部分介绍了Web和CGI编程,解释了HTTP编程模型、Web页面和Web浏览器;展示了如何配置Linux HTTPD服务器来支持用户Web页面、PHP和CGI编程;阐释了客户机和服务器端动态Web页面;演示了如何使用PHP和CGI创建服务器端动态Web页面。

TCP/IP协议

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。 TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。

IP主机和IP地址

主机:

主机是支持TCP/IP协议的计算机或设备。每个主机由一个32位的IP地址来标识。为了方便起见32位的IP地址号通常用点记法表示,例如:134121641,其中各个字节用点号分开。

主机也可以用主机名来表示,如dnsleecwsuedu。实际上,应用程序通常使用主机名而不是IP地址。在这个意义上说,主机名就等同于IP地址,因为给定其中一个,我们可以通过DNS(域名系统)(RFC1341987RFC10351987)服务器找到另一个,它将IP地址转换为主机名,反之亦然。

IP地址:

IP地址分为两部分,即NetworkID字段和HostID字段。根据划分,IP地址分为A~F类。例如,一个B类IP地址被划分为一个16位NetworkID,其中前2位是10,然后是一个16位的HostID字段。发往IP地址的数据包首先被发送到具有相同networkID的路由器。路由器将通过HostID将数据包转发到网络中的特定主机。每个主机都有一个本地主机名 localhost默认IP地址为127001。

本地主机的链路层是一个回送虚拟设备,它将每个数据包路由回同一个localhost。这个特性可以让我们在同一台计算机上运行TCP/IP应用程序而不需要实际连接到互联网。

IP协议

IP(Internet Protocol)协议的英文名直译就是:因特网协议,简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为5类。另外,IP还有进入防护,知识产权,指针寄存器等含义。

IP协议用于在IP主机之间发送/接收数据包。IP尽最大努力运行。IP主机只向接收主机发送数据包,但它不能保证数据包会被发送到它们的目的地,也不能保证按顺序发送。

IP就是一张身份证,存在于电脑、手机、监控摄像头、汽车等任何需要联网的设备上面;

IP是可以被追踪到和定位的,无论是网上发帖造谣生事或通过黑客技术攻击别人,所做的事情都会基于IP和其他ID信息被服务器记录下来,然后"阿sir"就可以追踪并抓到你。

UDP/TCP

UDP(用户数据报协议)在IP上运行,用于发送/接收数据报。与IP类似,UDP不能保证可靠性,但是快速高效。

TCP(传输控制协议)是一种面向连接的协议,用于发送/接收数据流。TCP也可在IP 上运行,但它保证了可靠的数据传输。通常,UDP类似于发送邮件的USPS,而TCP类似于电话连接。

套接字编程

在网络编程中,TCP/IP的用户界面是通过一系列C语言库函数和系统调用来实现的,这些函数和系统调用统称为套接字API。为了使用套接字 API,我们需要套接字地址结构,它用于标识服务器和客户机。netdbh和sys/socketh中有套接字地址结构的定义。

1.套接字地址

struct sockaddr_in {
sa_family_t sin_family; // AF_INET for TCP/IP
// port number
in_port_t sin_port;
struct in_addr sin_addr;// IP address );
// internet address struct in_addr {
// IP address in network byte order
s_addr;
uint32_t
);

在套接字地址结构中,

  • TCP/IP 网络的 sin_family 始终设置为 AF_INET。

  • sin_port包含按网络字节顺序排列的端口号。

  • sin addr是按网络字节顺序排列的主机IP地址。

2.套接字API

服务器必须创建一个套接字,并将其与包含服务器IP 地址和端口号的套接字地址绑定。它可以使用一个固定端口号,或者让操作系统内核选择一个端口号(如果 sin port为0)。为了与服务器通信,客户机必须创建一个套接字。对于UPD套接字,可以将套接字绑定到服务器地址。如果套接字没有绑定到任何特定的服务器,那么它必须在后续的 sendto()/recvfrom()调用中提供一个包含服务器IP 和端口号的套接字地址。

(1)通用套接字地址结构

  • sockaddr

struct sockaddr
{
uint8_t           sa_len;
sa_family_t       sa_family;
char              sa_data[14];
};

(2)IPv6套接字地址结构

  • IPv6套接字地址结构在<netinet/in.h>头文件中定义

struct in6_addr
{
unit8_t s6_add[16];

};
#define SIN6_LEN
struct sockaddr_in6
{
uint8_t           sin6_len;
sa_family_t       sin6_family;
in_port_t         sin6_port;
uint32_t          sin6_flowinfo;
struct in6_addr   sin6_addr;
uint32_t          sin6_scope_id;
};

(1)int套接字 (int域 ,int类型,int协议)

(2)int bind(int sockfd,struct sockaddr *addr,socklen_t addrlen)

(3)UDP套接字 UDP套接字使用sendto()/recvfrom0)来发送/接收数据报。

(4)TCP套接字

在创建套接字并将其绑定到服务器地址之后,TCP服务器使用listen()和accept()来接收来自客户机的连接

二、实践与代码截图

代码:

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

#define MAXLINE 256
#define PORT 7777
void sys_err(char *msg){
  perror(msg);
  exit(-1);
}
int main(int argc , char **argv){


  int sockFd,n;
  char recvLine[MAXLINE];
  struct sockaddr_in servAddr;

  if (argc != 2) {
      sys_err("usage: a.out <IPaddress>");
  }

  sockFd=socket(AF_INET,SOCK_STREAM,0);


  memset(&servAddr,0,sizeof(servAddr));

  servAddr.sin_family = AF_INET;
  servAddr.sin_port = htons(PORT);
  if (inet_pton(AF_INET,argv[1],&servAddr.sin_addr) <= 0) {

      sys_err("inet_pton error");
  }

  connect(sockFd,(struct sockaddr *)&servAddr,sizeof(servAddr));


  while((n=read(sockFd,recvLine,MAXLINE)) >0 ){
      recvLine[n] = '\0';
      if(fputs(recvLine,stdout) == EOF){
          sys_err("fputs error");
      }
  }
  if(n <0){
      sys_err("read error");
  }
  return 0;
}

截图:

 

 



标签:11,协议,IP,TCP,笔记,IP地址,服务器,接字,20201322
From: https://www.cnblogs.com/iris2333/p/16881767.html

相关文章

  • VueRouter笔记 - VueRouter基础
    VueRouter目录VueRouter1.VueRouter简介1.1路由的基础实现步骤1.2注意事项2.嵌套路由3.命名路由4.重定向和别名4.1重定向4.2别名5.编程式路由导航5.1使用router......
  • VueRouter笔记 - 路由参数(query/params/props/meta)
    路由参数目录路由参数1.query2.params参数3.props参数4.meta参数1.queryquery可以用于在不同路由之间传递数据(大多数是父传子)一般网页在跳转时显示的链接,?后......
  • 【日总结】2022.11.11
    到衡实了今天期中考完,考的很垃圾,没啥可总结的,补一道前几天的题的口胡2022NOIPA层联测19T4术劣在地理自习上想完了细节。感觉智力很下降,经典trick没有想起来。......
  • 【2022-11-11】luffy项目实战(六)
    一、登录注册页面Header.vue<template><divclass="header"><divclass="slogan"><p>老男孩IT教育|帮助有志向的年轻人通过努力学习获得体面的工作和生......
  • 【DL经典论文精读笔记】AlexNet
    1.1引言1.2数据集就是ImageNet,当时计算机视觉最大的数据集1.3结构  采用双GPU结构实现,并行处理图像,2-3,5-全连接部分中间还将特征图共享最后全连接层输出的4096......
  • 22.11.11
    1\torch.nn.functional.conv1d(15条消息)Pytorch的第二步:(1)torch.nn.functional.conv卷积模块详解模块_Deep_bluce的博客-CSDN博客importtorch.nn.functionalasF......
  • 2022-11-11
    2D: 2H:  20F:   总结:预计转2D下跌,所以做空2H上涨中枢形成,等待出中枢20F,前一波上涨是20F级别,最近一波上涨级别如果不少于20F且两波背驰,开空 ......
  • 第13章学习笔记
    一、梗概本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/IP网络中的UD......
  • 2022-11-11 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • #python笔记
    python笔记数据类型查看使用type()语句来查看数据的类型方法一:使用print直接输出信息print(type("黑马程序员")print(type("666"))print(type(11.345))方法二:......