컴퓨터 네트워크 - week 2

deutan·2025년 9월 5일

computer-network

목록 보기
2/14


Sender의 주소 : A/10
알파벳 대문자 : IP
10진수 : MAC

D/N(라우팅) 테이블 : 최종 목적지(D), 다음 목적지(N)


LAN 1

최종목적지 P를 보고 다음 목적지 F 설정
hop-to-hop통신을 위해 ARP 테이블을 보고
MAC주소 pair(20, 10) 헤더 부착


LAN 2

헤더를 떼고 다음 목적지 N으로 가기 위한 헤더 부착

다음 LAN에서도 반복


Physical address인 MAC주소는 hop-to-hop 에서 변하지만
Logical address인 IP는 계속 유지된다.


데이터 단위

Application Layer : Message
Transport Layer(TCP) : Segment(process to process, port number)
Network Layer : Datagram(source to destination, ip)
Data Link Layer : Frame(hop to hop, MAC)

대략 500~1000 Byte 사이이며
Segment는 변경시키지 않는 한 536 Byte 이다.


Physical address 는 hop-to-hop에서 변하지만
Logical and Port address는 유지된다.


TCP(Transmission Control Protocol)


TCP는 현대 인터넷에서 Transport Layer의 대부분을 차지하고 있는 프로토콜이다.

TCP에서 쓰이는 약속된 포트번호 표


Stream of bytes라는 표현은 Application이 만들어 낸 byte boundary를 유지하지 않는다는 것이다.

Application layer에서 작성된 코드가 3페이지라고 가정한다.
그렇다면 Application layer가 만들어 낸 boundary는 3개로 나뉜다.

이 데이터들을 transport layer로 보내면 application의 boundary에 구애받지 않고 버퍼는 자신의 boundary에 의해 포장하여 보낸다는 의미이다.

Stream Delivery(TCP) VS Boundary Delivery(UDP)
UDP는 헤더에 몇 바이트를 보냈는지 표기한다.


Sender Buffer


버퍼의 그림을 보면 3가지 상태가 존재한다.

  • sent : 이미 보낸 데이터이며 상대가 받은 것을 확인하기 전까지 유지
  • not sent : 아직 보내지 않은 데이터
  • empty : 빈 공간

Receive Buffer


2가지 상태 존재

  • not read
  • empty

이해를 위해 양쪽이 sender와 receiver를 하나씩 가지고 있지만
실제로는 양쪽 다 sender, receiver를 가지고 있음(TCP는 양방향 통신)



Segment들은 application이 어떻게 작성되었던 상관 없이 TCP가 만들어낸 단위이다.



TCP 통신을 위한 헤더에는 20~60바이트가 들어가고
시퀀스넘버, ack넘버가 포함된다.
optional한 데이터가 0~40바이트 사이로 주어질 수 있다.

각 시퀀스 넘버는 세그먼트의 시작 바이트넘버가 되고
통신의 첫번째 넘버는 랜덤하게 생성된다.

5000바이트 크기의 파일이 TCP를 통해 이동하며 첫 바이트 번ㄴ호는 10001번으로 결정 되었다. segment의 크기가 1000이라면
위 그림처럼 세그먼트가 생성 될 것이다.



상대방과 수신 여부를 위해 주고 받는 ACK 방식
Selective ACK : 내가 받은 sequence number를 ack넘버로 돌려줌
Cumulative ACK : 내가 받고 싶은 sequence number를 ack 넘버로 돌려줌

TCP는 Cumulative 방식을 사용 중이며 ack넘버를 201번을 준다는 것은
200번 바이트 까지는 완벽하게 수신하였다는 의미 또한 가진다.


실습

네트워크 프로그래밍이란

  • 소켓 프로그래밍이라고도 함
  • 네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 데이터 송수신 프로그램의 작성

소켓이란

  • 네트워크의 연결 도구
  • 운영체제에 의해 제공되는 소프트웨어적 장치
  • 프로그래머에게 데이터 송수신에 대한 물리적, 소프트웨어적인 디테일을 신경쓰지 않게 한다.

생성방법
int socket(int domain, int type, int protocol);
성공 시 파일 디스크립터, 실패 시 -1 리턴

소켓의 주소 할당 및 연결
ip, port 구성
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
성공 시 0, 실패 시 -1 리턴

연결 요청이 가능한 상태의 소켓
int listen(int sockfd, int backlog);
성공 시 0, 실패 시 -1 리턴
일반 소켓을 서버 소켓으로 바꾸어 주는 것
-> 연결요청 가능한 상태로 변경

연결 요청의 수락
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
성공 시 파일디스크립터, 실패 시 -1 리턴

listen 소켓은 대표전화 처럼 연결을 받는 역할만 하고
accept로 연결을 수락하면 리턴하는 소켓이 실제 통신 소켓이 된다.

연결 요청을 허용하는 프로그램을 일반적으로 서버라고 가르킨다.
클라이언트보다 먼저 실행되어야 한다.

전화를 거는 소켓의 구현
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
성공 시 0, 실패 시 -1 리턴

profile
Visual Computing and Learning

0개의 댓글