[한양대학교 이석복 교수, 2015년도 컴퓨터네트워크 강의]
를 개인이 정리한 글이며, [추가 내용 및 의역]이 포함되어 있습니다.
컴퓨터네트워크
인터넷을 동작시키는 컴퓨터네트워크 프로토폴을 학습한다.
www.kocw.net
목차
What Is a Socket?
앱과 네트워크 사이의 인터페이스
- 소켓의 유형이 통신 방식의 스타일을 결정한다.
e.g.
relable vs best effort
connection-oriented vs connectionless
- 구성이 완료되면, 앱은
네트워크 전송을 위해 데이터를 소켓으로 전달한다.
다른 호스트로부터 네트워크를 거쳐 전송된 데이터를 소켓으로 전달받는다.
Two Essential Types of Sockets (in C lang)
SOCK_STREAM (소켓 스트림, a.k.a TCP Socket)
- 신뢰성/순서 보장, 연결 기반, 양방향
SOCK_DGRAM (소켓 데이터그램, a.k.a UDP Socket)
- 신뢰성/순서 미보장
- 연결 개념 없음 (앱이 각 패킷의 목적지를 정함)
- 전송 혹은 수신만 가능
=> 일반적으로 수신측에서 전송 호스트를 찾을 수 없다. (Dest IP/Port만을 사용하므로)
Sockets API (in C lang)

Java에서의 간단한 Socket 통신 예제 -> https://sh3542.tistory.com/69
기본 과정
1. 소켓 생성 및 셋업
2. 연결 생성 (TCP의 경우, UDP생략)
3. 데이터 통신
4. 연결 해제 (TCP의 경우, UDP생략)
1. 소켓 생성 및 셋업
socket()
- 소켓 생성
bind()
- 소켓을 특정 포트에 바인딩
listen()
- 서버에서만 사용
- 소켓을 수신 대기 상태로 변경
accept()
- 서버에서만 사용
- 요청 승인 준비 완료 => 클라이언트가 요청을 보내기 전까지 Block
2. 연결 생성 (TCP case)
connect()
- three-way handshaking 수행
3. 데이터 통신
write(), read()
4. 연결 해제 (TCP case)
close()
Tip
특정 키를 바인딩하여 (e.g. ctrl + c) "거칠게" 포트를 종료한다면, 포트가 제대로 할당 해제되지 않는다.
이는 몇 분 후에야 비로소 해제됨을 의미하며, 이 문제가 발생할 가능성을 줄이려면 시그널 함수를 이용한다.
1.
signal(SIGINT, cleanExit())
2.
#include <signal.h>
void cleanExit() {
// free..
exit(0);}
Multiplexing/Demultiplexing
Demultiplexing (at receive host)
- 하위 계층을 통해 전송받은 Segment를 앱 계층의 올바른 소켓에 전달하는 동작
Multiflexing (at send host)
- 앱 계층의 여러 소켓에서 데이터를 수집하고, 헤더를 추가하여 데이터를 감싸는 동작 (후에 Demultiflexing에 사용)
How Demultiplexing Works?
- 각각의 Datagram은 소스 IP 주소와 목적지 IP 주소를 가지고있다.
- 각각의 Datagram은 1개의 전송계층 Segment를 가지고 있다.
- 각각의 Segment는 소스 및 목적지 포트 번호를 가지고 있다
- 호스트는 IP 주소와 포트 번호를 통해 Segment를 올바른 소켓으로 보낸다.
요약
1. Multiplexing 결과물인 Datagram은 [송신/수신측 주소] 및 [전송 계층에서 사용되는 Segment]로 구성
2. 수신측 전송계층에서 [Segment의 포트 번호]를 기반으로 Demultiplexing하여 올바른 애플리케이션으로 분배
Demultiplexing (In UDP)
목적지의 IP/Port로 판단한다. => 출처 host와 상관없이 해당하는 IP의 Port로 분배한다.
- 따라서, 송신측의 정보를 세션관리에 사용하지 않는다.
- 송/수신측의 연결 개념 없이(Connectless) 단방향 통신을 수행한다.
Demultiplexing (In TCP)
목적지의 IP/Port와 소스(수신측) IP/Port로 판단한다. => "어떤 host에서 보낸 데이터인지"를 같이 판별하여 분배한다.
- 따라서, 송신측의 정보를 사용한다.
- Connection-Oriented 양방향 통신을 수행한다.
추가 요약
1. 서버에 get 요청을 보냈을 때, 경로 외 리소스명을 명시하지 않자 많은 log 발생
- index.html과 같은 기본파일에 N개의 하위 파일들이 존재했을 것이고, 브라우저가 이를 파싱하여 N개의 get 요청을 추가로 했기 때문
2. 네이버와 TCP 통신을 한다는 것은, Client인 나와의 통신을 위한 Socket을 열어놓는 다는 것이며, TCP를 이용한 broadcast 또한 모든 대상에 대한 Socket 할당 및 TCP Connection을 수행하는 것이다.
3. 네트워크를 이해한다는 것은 프로토콜을 이해하는 것이고, 프로토콜을 이해한다는 것은 헤더의 정보를 이해해야한다는 것이다. 헤더는 프로토콜의 특성과 관련한 속성들의 집합이기 때문이다.
4. UDP에서도 헤더의 checksum 필드에 기반하여, 오류를 발견하면 해당 데이터를 drop한다. 따라서, 최소한의 검증은 수행하며, 앱계층에 데이터가 전달되었다는 것은 최소한의 에러는 없다는 것을 의미한다.
'CS - 강의, 서적 > [Network] 한양대학교 이석복 교수 강의' 카테고리의 다른 글
[네트워크] KOCW 이석복 강의 - 애플리케이션 2 (3) | 2024.09.12 |
---|---|
[네트워크] KOCW 이석복 강의 - 컴퓨터 네트워크 기본 2 (0) | 2024.07.31 |
[네트워크] KOCW 이석복 강의 - 컴퓨터 네트워크 기본 1 (0) | 2024.07.26 |