본문 바로가기

Network/컴퓨터 네트워크

5주차 정리

728x90
반응형

소켓 프로그래밍)

소켓 프로그래밍은 컴퓨터 네트워크에서 소프트웨어 어플리케이션 간 통신을 위한 API(Application Programming Interface). 소켓은 IP 주소와 포트 번호로 구성된 고유한 네트워크 엔드포인트를 나타내며, 네트워크를 통해 다른 소켓과 데이터를 주고받을 수 있다.
 
소켓 프로그래밍은 TCP(신뢰성), UDP(비신뢰성)
소켓 프로그래밍에서는 일반적으로 클라이언트-서버 모델을 사용.
소켓 프로그래밍은 다양한 어플리케이션에서 사용되며, 웹 브라우저와 웹 서버, 채팅 어플리케이션, 온라인 게임 등에서도 사용.
 
 
 
 

Transport Layer)

OSI 7 Layer 모델의 전송 계층은 데이터의 신뢰성을 보장하는 계층으로, 송신 측에서 전송할 데이터를 세그먼트(segment) 단위로 나누고, 수신 측에서는 이를 재조립하여 원래의 데이터를 복원하는 역할을 합니다.
 
TCP(Transmission Control Protocol)
TCP는 신뢰성을 보장하기 위해, 데이터를 전송하기 전에 송신 측과 수신 측 간에 3-way handshake를 수행하여 연결을 설정합니다. 데이터 전송 중에는, 수신 측에서 ACK(ACKnowledge) 메시지를 송신 측으로 보내어 데이터의 수신 여부를 확인하고, 데이터의 손실이나 중복 전송 등을 처리합니다.
 
UDP(User Datagram Protocol)
전송 계층에서 비신뢰성 프로토콜로 사용됩니다. UDP는 연결 설정 과정이 없으며, 데이터를 전송할 때 데이터 그대로를 패킷으로 만들어 전송하고, 수신 측에서는 패킷을 받은 순서대로 처리합니다. 데이터의 무결성은 검사하지만, 패킷의 손실이나 중복 전송 등은 처리하지 않습니다. 따라서, UDP는 데이터 전송 속도가 빠르고, 오버헤드가 적어서 실시간 전송이 필요한 경우에 사용됩니다.
 
 

사물적 비유)

네트워크 레이어는 호스트 간의 소통을, 전송 계층은 프로세스 간의 소통을 담당한다.
 
host = 집
process = 아이들(kids)
app messages = 아이들간의 편지
transport protocol = 집(host)안에서 편지(packet)을 분배하는 역할을 하는 아이(큰 형)
network-layer protocol = 집(host)과 집(host)사이의 편지(packet)을 주고 받도록 하는 역할(우체부).
link, physical layer = 버스, 오토바이 등 우체부가 타고 다니는 이동 수단(운반 차량)
 
 

다중화 & 역다중화)

전송 계층에서의 다중화(multiplexing)와 역다중화(demultiplexing)는 다수의 프로세스(processes)가 동시에 전송 계층을 통해 통신할 수 있도록 하는 기술.
 
다중화(multiplexing)는 여러 개의 소켓(socket)으로부터 전송 계층에서 제공하는 단일 통신 서비스를 생성하는 과정.
다중화는 보통 다음과 같은 방식으로 이루어진다.
  1. 여러 개의 소켓이 전송 계층에 데이터를 보내고자 요청(Request).
  2. 전송 계층은 이러한 요청(Request)을 받아, 각 소켓으로부터 데이터를 받아 하나의 데이터 스트림으로 합침.
  3. 데이터 스트림은 네트워크 계층에 전달되어 전송.
역다중화(demultiplexing)는 전송된 데이터 스트림을 여러 개의 소켓으로 분리하는 과정.
역다중화는 보통 다음과 같은 방식으로 이루어진다.
  1. 전송된 데이터 스트림이 전송 계층에 도착.
  2. 전송 계층은 도착한 데이터 스트림을 각 소켓으로 분리.
  3. 분리된 데이터는 해당 소켓에게 전달.
이러한 다중화와 역다중화를 통해, 다수의 프로세스가 동시에 전송 계층을 통해 통신할 수 있게 되며, 전송 계층은 이러한 다중화와 역다중화를 통해 각 소켓 간에 데이터를 구분하고 전달할 수 있다.
 
 
UDP는 DatagramSocket을 통해서 IP주소와 포트번호로 통신한다.
 

Process & Thread)

프로세스(Process)와 스레드(Thread)는 컴퓨터에서 실행되는 프로그램의 실행 단위를 의미.
 
프로세스는 운영체제에서 실행 중인 프로그램을 의미(메모리에 올라가 있다).
프로세스는 코드, 데이터, 메모리 등의 자원을 가지고 실행 중인 프로그램의 인스턴스. 각 프로세스는 자신만의 주소 공간, 스택, 힙 등을 가지고 있으며, 다른 프로세스와는 독립적으로 실행. 각각의 프로세스는 운영체제에 의해 자신만의 실행 환경이 만들어지고, CPU 시간을 할당 받아 실행.
 
스레드는 프로세스 내에서 실행되는 작은 실행 단위를 의미. 하나의 프로세스에는 여러 개의 스레드가 있을 수 있다. 스레드는 프로세스 내에서 메모리, 파일 등의 자원을 공유하며, 각각의 스레드는 자신만의 스택을 가지고 있다. 스레드는 각각 별도의 실행 경로를 가지고 있으며, 동시에 실행될 수 있다.
 

UDP)

UDP는 프로세스 대 프로세스 통신을 생성: 포트번호를 이용한다.
최소한의 오류 제어 매커니즘(만약 오류 제어가 필요하다면 어플리케이션 레벨에서 구현)
비연결형(connectless) 따라서 3-way handshake 같은 연결 과정이 불필요.
신뢰성 없는 전송 프로토콜
따라서 최소한의 오버헤드로 전송 속도가 빠름(비정규적인 송신률)
비상태정보(Non-state)
 
예시: DNS, SNMP, 멀티미디어 스트리밍
 
Segment Header)
 
UDP (User Datagram Protocol)의 세그먼트 헤더는 크게 네 부분으로 구성됩니다.
 
소스 포트 번호 (Source Port Number): 2바이트
  • 송신자의 포트 번호를 나타냅니다.
목적지 포트 번호 (Destination Port Number): 2바이트
  • 수신자의 포트 번호를 나타냅니다.
UDP 길이 (Length): 2바이트
  • UDP 세그먼트 전체 길이를 바이트 단위로 나타냅니다.
  • 헤더와 데이터를 모두 포함합니다.
체크섬 (Checksum): 2바이트
  • 오류 검출에 사용되는 필드입니다.
  • 전송된 데이터에 대한 체크섬 값을 계산하여 수신 측에서도 계산한 체크섬 값과 비교하여 데이터의 무결성을 확인합니다.
 
 
 
헤더 사이즈도 작고 별도의 전송 제어나 혼잡 제어를 하지 않기에 속도가 빠르다.
 

UDP 체크섬 체크 방법)

UDP 체크섬 값은 데이터 전송 중에 오류가 발생하지 않도록 보장하는 역할.
체크섬 값은 송신측에서 계산하여 세그먼트의 체크섬 필드에 추가되며, 수신측에서는 체크섬 값이 유효한지 검사.
체크섬 검사는 다음과 같은 방법으로 수행.
  1. 수신측에서 수신한 UDP 세그먼트의 체크섬 필드 값을 복사.
  2. 체크섬 필드를 0으로 설정.
  3. 수신한 UDP 세그먼트의 모든 2바이트 워드에 대해 1의 보수를 취하여 더한다.
  4. 마지막으로 16비트 단위로 넘어간 캐리 값을 더하여 1의 보수를 취한 값을 체크섬 필드 값과 비교한다.
 
 
 
만약 체크섬 필드 값과 계산된 체크섬 값이 다르다면 오류가 발생한 것으로 간주하여 해당 세그먼트를 폐기. 체크섬 값이 일치한다면 데이터의 무결성이 보장된 것으로 간주할 수 있다.
 

UDP 헤더 예제)

 

Answer)

a. 처음 네자리는 발신지 포트 번호 CB84, 16진수라서 10진수로 바꾸면 52100 이다.
b. 두번째 네자리는 목적지 포트 번호 000D, 16진수라서 10진수로 바꾸면 13 이다.
c. 세번째 네저리는 UDP 패킷의 전체길이 001C, 16진수라서 10진수로 바꾸면 28 바이트 이다.
d. 헤더의 크기는 8바이트로 고정이다. 따라서 데이터의 길이는 28 - 8 = 20 바이트다.
e. 목적지 포트를 보고 서버 -> 클라이언트, 클라이언트 -> 서버 인지 알 수 있다. 여기서는 13번 포트이므로 클라이어트 -> 서버다.
f. 클라이언트 프로세스는 13번 포트라서 Daytime 이다.
 
 

 

728x90
반응형

'Network > 컴퓨터 네트워크' 카테고리의 다른 글

7주차 정리  (0) 2023.04.21
6주차 정리  (0) 2023.04.09
4주차 정리  (0) 2023.03.24
3주차 정리  (0) 2023.03.17
2주차 정리  (0) 2023.03.13