현제의 현재이야기

[CS] 컴퓨터 네트워크 1008 TIL 본문

cs

[CS] 컴퓨터 네트워크 1008 TIL

현재의 현제 2022. 10. 8. 14:59

 

μ와 큐잉 지연에 관하여

  • μ 는 링크의 전송률로 패킷이 큐에서 밀려나는 비율이다. 단위는 packet per second이다.
  • R 도 링크의 전송률이지만 비트가 큐에서 밀려나는 비율이다. 단위는 bit per second이다.
  • 이 둘을 같게 해주려면 이 식을 잘 알아야한다. 그것은 비트를 패킷으로 나누면 L비트가 나온다.
  • 그러면 L =  bit / packet 라는 식이 나오고, 간략하게 하면 L = b / p 가 된다.
  • 즉 μ 는 R/L = b/s / b/p = p/s 가 된다.
  • R/L가 도출하는 이유는 비트의 전송률을 L비트씩 나누어야 패킷 당 전송률이 나오기 때문이다. (p = b / L)
  • μ 는 아주 중요한 지표인데 그 이유는 a가 초당 링크에 도착하는 패킷률이라면 μ 는 초당 나가는 패킷률이기 때문에 a의 역수라고 볼 수 있다.
  • 트래픽 강도는 I고 이는 I = Ra/L 로 표현 할 수 있는데 μ 를 이용하면 I = a/μ 로 나타낼 수 있다.
  • d queue는 IL/R(1 - I)이고 d trans 는 L / R 이다.
  • 이를 다시 바꾸면 μ (I / 1 - I)이고 전체지연은 d queue + d trans 이므로 이 둘을 합하면 1/μ / 1- a/μ 가 나오며, 약분을 하면 최종적으로 1 / μ - a가 나온다.
  • 즉, μ - a가 0이 되면 분모가 0이 되어서 무한대로 가기 때문에, 전체 지연에 있어서 패킷이 들어오고 나가는 양은 매우 중요한 지표이다. 따라서 a/μ는 항상 < 1 을 유지해야 한다.

그렇다면 La/R 은 무엇인가

  • La/R는 L = 패킷의 길이(비트) * a(링크에 도착하는 패킷률)을 하면 큐에 도착하는 전체 패킷의 비트를 알 수 있고, 이를 R (비트의 전송률)을 나누어서 비율을 알려준다. 즉 La/R이 1보다 크면 도착하는 비트가 나가는 비트보다 더 크기 때문에 무한대로 간다.
  • 즉 La/R은 큐잉 지연이 일어나냐 안 일어나냐의 척도이며 이는 트래픽 강도(I)라고 표현한다.
  • La/R는 값 자체로 큐잉지연을 판단하고 μ는 '초당 패킷이 큐에서 밀려나는 비율'로 a/μ을 통해서 큐잉 지연을 판단할 수있다. 

결론은?

  • 교수님이 말씀하신대로 이 컴퓨터 네트워크는 단위를 잘 보아야겠다.

분배 시간

  • 분배시간이란 모든 N개의 피어들이 파일의 복사본을 얻는 데 걸리는 시간
  • 파일의 크기는 F라고 가정(단위 : 비트)

서버 - 클라이언트 구조의 최소 분배시간의 하한값

  • 서버는 NF/u s 시간으로 피어에게 각각 전송
  • d min = {d1, d2, d3 ... }, 즉 가장 낮은 다운로드 속도를 가진 피어의 다운로드 속도
  • 피어들의 최소 분배 시간은 적어도 F/d min

서버 or 클라이언트 성능이 낮은 것을 채택

 

P2P 구조의 초소 분배시간 하한값

  • 한 피어가 파일 데이터 일부를 수신할 때, 피어는 그 데이터를 다른 피어들에게 재분배하는 데 자신의 업로드 용량을 이용할 수 있다.
  • 서버는 피어 커뮤니티에 파일이 도달할 수 있도록 적어도 한 번 접속링크로 파일을 보낸다. -> F / u s
  • 다운로드 속도가 가장 느린 피어는 F / d min
  • 시스템 전체 업로드 용량 = 서버의 업로드 속도 + 각 피어들의 업로드 속도
  • 즉, NF/ (u s + u1 + u2 + u3 + ... + u n )

둘의 비교

  • 서버 - 클라이언트 구조는 N이 커질수록 선형적인 증가를 보이는 반면
  • p2p 구조는 N이 증가하여도 u i 의 i 또한 증가하기 때문에 지수 그래프

TCP Socket Programing

  • 서버 프로세스가 수행되면 클라이언트 프로세스는 TCP연결 시도, 이는 TCP소켓 생성으로 가능
  • 생성할 때 서버의 welcome socket의 ip주소와 포트번호를 명시하고, 세 방향 핸드셰이크를 하고 TCP연결 설정(문을 두드림)
  • 핸드셰이크를 할 때, 서버는 해당 클라이언트에게 지정되는 새로운 소켓을 생성. 이는 처음 welcome socket과 다른 새로운 connection socket이 생성된다.
  • 그러니깐 일명  '파이프'가 두 소켓에 생성되는 거임
  • 주고 받고가 끝난 뒤, connetction socket은 닫히지만, welcoem soecket(코드에선 serlverSocket)이 열려있기 때문에 언제든지 클라이언트가 문을 두드릴 수 있다.

Transport Layer Actions

  • sender는 application 계층에서 메시지를 받은 후, segment header fields를 지정한다.
  • 그리고 segment를 생성하고 IP에게 segment를 준다.
  • receiver는 IP로부터 segment를 받고, header를 check한다. 그리고 application 메시지를 추출 한 후, demultiplexing을 하고 socket을 통해서 메시지즈를 application에게 전달한다.

Multiplexing and demultiplexing

  • 출발지 소켓에서 데이터를 모으고, 세그먼트를 생성하기 위해 header 정보로 캡슐화 하고, 네트워크 계층으로 보내는 것을 multiplexing이라고 한다.
  • 트랜스포트 계층에서 받은 세그먼트 데이터를 header를 읽고 소켓을 통해서 올바르게 전달하는 작업을 demultiplexing이라고 한다.
  • UDP는 source port와 destination port만 필요하고, TCP는 여기에 두 곳의 IP또한 필요하다. 

  • 이유는 이와 같이 TCP는 같은 IP주소에서 두 개의 포트가 열릴 수 있고, 클라이언트의 포트 생성은 서로 독립적으로 생성하기 대문에 source port가 그림과 같이 9157로 동일 할 수 있다. 따라서 TCP는 source IP 또한 검사하는 것이 필요하다.

UDP

  • DNS, SNMP, HTTP/3가 UDP를 쓴다.
  • 응용 계층에서 손실에 대한 수행을 해야한다. http/3
  • 최소한의 메커니즘을 가진 프토로콜, 오로지 전송에만 신경, 순서를 잘 맞추고 싶은 응용은 tcp를 써라

구성

  • 포트 두 개, 길이(헤드포함 byte)와 checksum
  • checksum: 에러가 있는지 도와주는 것
  • 아이디어는 말 그래로 sum. 5, 6을 보내면 11도 같이 보낸다. 만약 4, 6이 오면 11이 아니기 때문에..알아냄
  • 16bit 두 개를 더한 후, 오버플로가 나면 1을 뒤로 넘겨준다. 그리고 이 합에 대한 1의 보수를 check sum이라고 한다.수신자는 check sum을 포함한 4개의 16비트 워드들이 더해지고 오류가 없다면 모두 1이 될 것이다.
  • 대단히 심각한 문제가 발생할 수 있다. 이정도로 쓰는 거다.
  • 번외) 아스키코드 7비트 중, 맨 앞에 1이 짝수가 되도록 비트룰 추가한다. parity check 라고 한다.
Comments